LCOV - code coverage report
Current view: top level - scenegraph - mpeg4_nodes.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 8575 26233 32.7 %
Date: 2017-05-14 22:31:15 Functions: 629 1375 45.7 %

          Line data    Source code
       1             : /*
       2             :  *                      GPAC - Multimedia Framework C SDK
       3             :  *
       4             :  *                      Authors: Jean Le Feuvre
       5             :  *                      Copyright (c) Telecom ParisTech 2000-2012
       6             :  *                                      All rights reserved
       7             :  *
       8             :  *  This file is part of GPAC / Scene Graph sub-project
       9             :  *
      10             :  *  GPAC is free software; you can redistribute it and/or modify
      11             :  *  it under the terms of the GNU Lesser General Public License as published by
      12             :  *  the Free Software Foundation; either version 2, or (at your option)
      13             :  *  any later version.
      14             :  *
      15             :  *  GPAC is distributed in the hope that it will be useful,
      16             :  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      17             :  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      18             :  *  GNU Lesser General Public License for more details.
      19             :  *
      20             :  *  You should have received a copy of the GNU Lesser General Public
      21             :  *  License along with this library; see the file COPYING.  If not, write to
      22             :  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
      23             :  *
      24             :  */
      25             : 
      26             : 
      27             : /*
      28             :         DO NOT MOFIFY - File generated on GMT Tue Nov 08 09:10:57 2011
      29             : 
      30             :         BY MPEG4Gen for GPAC Version 0.5.0
      31             : */
      32             : 
      33             : #include <gpac/nodes_mpeg4.h>
      34             : 
      35             : 
      36             : #include <gpac/internal/scenegraph_dev.h>
      37             : 
      38             : #ifndef GPAC_DISABLE_VRML
      39             : 
      40             : /*
      41             :         Anchor Node deletion
      42             : */
      43             : 
      44             : static void Anchor_Del(GF_Node *node)
      45             : {
      46         184 :         M_Anchor *p = (M_Anchor *) node;
      47          92 :         gf_sg_sfstring_del(p->description);
      48          92 :         gf_sg_mfstring_del(p->parameter);
      49          92 :         gf_sg_mfurl_del(p->url);
      50          92 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
      51          92 :         gf_node_free((GF_Node *) p);
      52          92 : }
      53             : 
      54             : static const u16 Anchor_Def2All[] = { 2, 3, 4, 5};
      55             : static const u16 Anchor_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
      56             : static const u16 Anchor_Out2All[] = { 2, 3, 4, 5};
      57             : 
      58             : static u32 Anchor_get_field_count(GF_Node *node, u8 IndexMode)
      59             : {
      60         164 :         switch(IndexMode) {
      61             :         case GF_SG_FIELD_CODING_IN:
      62           0 :                 return 7;
      63             :         case GF_SG_FIELD_CODING_DEF:
      64          47 :                 return 4;
      65             :         case GF_SG_FIELD_CODING_OUT:
      66           0 :                 return 4;
      67             :         case GF_SG_FIELD_CODING_DYN:
      68           0 :                 return 0;
      69             :         default:
      70          35 :                 return 7;
      71             :         }
      72          82 : }
      73             : 
      74             : static GF_Err Anchor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
      75             : {
      76         188 :         switch(IndexMode) {
      77             :         case GF_SG_FIELD_CODING_IN:
      78           0 :                 *allField = Anchor_In2All[inField];
      79           0 :                 return GF_OK;
      80             :         case GF_SG_FIELD_CODING_DEF:
      81          94 :                 *allField = Anchor_Def2All[inField];
      82          94 :                 return GF_OK;
      83             :         case GF_SG_FIELD_CODING_OUT:
      84           0 :                 *allField = Anchor_Out2All[inField];
      85           0 :                 return GF_OK;
      86             :         default:
      87           0 :                 return GF_BAD_PARAM;
      88             :         }
      89          94 : }
      90             : static GF_Err Anchor_get_field(GF_Node *node, GF_FieldInfo *info)
      91             : {
      92        1154 :         switch (info->fieldIndex) {
      93             :         case 0:
      94          35 :                 info->name = "addChildren";
      95          35 :                 info->eventType = GF_SG_EVENT_IN;
      96          35 :                 info->on_event_in = ((M_Anchor *)node)->on_addChildren;
      97          35 :                 info->fieldType = GF_SG_VRML_MFNODE;
      98          35 :                 info->NDTtype = NDT_SF3DNode;
      99          35 :                 info->far_ptr = & ((M_Anchor *)node)->addChildren;
     100          35 :                 return GF_OK;
     101             :         case 1:
     102          35 :                 info->name = "removeChildren";
     103          35 :                 info->eventType = GF_SG_EVENT_IN;
     104          35 :                 info->on_event_in = ((M_Anchor *)node)->on_removeChildren;
     105          35 :                 info->fieldType = GF_SG_VRML_MFNODE;
     106          35 :                 info->NDTtype = NDT_SF3DNode;
     107          35 :                 info->far_ptr = & ((M_Anchor *)node)->removeChildren;
     108          35 :                 return GF_OK;
     109             :         case 2:
     110         121 :                 info->name = "children";
     111         121 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     112         121 :                 info->fieldType = GF_SG_VRML_MFNODE;
     113         121 :                 info->NDTtype = NDT_SF3DNode;
     114         121 :                 info->far_ptr = & ((M_Anchor *)node)->children;
     115         121 :                 return GF_OK;
     116             :         case 3:
     117          92 :                 info->name = "description";
     118          92 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     119          92 :                 info->fieldType = GF_SG_VRML_SFSTRING;
     120          92 :                 info->far_ptr = & ((M_Anchor *) node)->description;
     121          92 :                 return GF_OK;
     122             :         case 4:
     123          92 :                 info->name = "parameter";
     124          92 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     125          92 :                 info->fieldType = GF_SG_VRML_MFSTRING;
     126          92 :                 info->far_ptr = & ((M_Anchor *) node)->parameter;
     127          92 :                 return GF_OK;
     128             :         case 5:
     129         167 :                 info->name = "url";
     130         167 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     131         167 :                 info->fieldType = GF_SG_VRML_MFURL;
     132         167 :                 info->far_ptr = & ((M_Anchor *) node)->url;
     133         167 :                 return GF_OK;
     134             :         case 6:
     135          35 :                 info->name = "activate";
     136          35 :                 info->eventType = GF_SG_EVENT_IN;
     137          35 :                 info->on_event_in = ((M_Anchor *)node)->on_activate;
     138          35 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     139          35 :                 info->far_ptr = & ((M_Anchor *) node)->activate;
     140          35 :                 return GF_OK;
     141             :         default:
     142           0 :                 return GF_BAD_PARAM;
     143             :         }
     144         577 : }
     145             : 
     146             : 
     147             : static s32 Anchor_get_field_index_by_name(char *name)
     148             : {
     149          80 :         if (!strcmp("addChildren", name)) return 0;
     150          40 :         if (!strcmp("removeChildren", name)) return 1;
     151          60 :         if (!strcmp("children", name)) return 2;
     152          20 :         if (!strcmp("description", name)) return 3;
     153          20 :         if (!strcmp("parameter", name)) return 4;
     154          40 :         if (!strcmp("url", name)) return 5;
     155           0 :         if (!strcmp("activate", name)) return 6;
     156           0 :         return -1;
     157          40 : }
     158             : static Bool Anchor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     159             : {
     160             :         switch (FieldIndex) {
     161             :         default:
     162           0 :                 return 0;
     163             :         }
     164             : }
     165             : 
     166             : 
     167             : 
     168             : GF_Node *Anchor_Create()
     169             : {
     170             :         M_Anchor *p;
     171         276 :         GF_SAFEALLOC(p, M_Anchor);
     172          92 :         if(!p) return NULL;
     173          92 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Anchor);
     174          92 :         gf_sg_vrml_parent_setup((GF_Node *) p);
     175             : 
     176             :         /*default field values*/
     177          92 :         return (GF_Node *)p;
     178          92 : }
     179             : 
     180             : 
     181             : /*
     182             :         AnimationStream Node deletion
     183             : */
     184             : 
     185             : static void AnimationStream_Del(GF_Node *node)
     186             : {
     187         252 :         M_AnimationStream *p = (M_AnimationStream *) node;
     188         126 :         gf_sg_mfurl_del(p->url);
     189         126 :         gf_node_free((GF_Node *) p);
     190         126 : }
     191             : 
     192             : static const u16 AnimationStream_Def2All[] = { 0, 1, 2, 3, 4};
     193             : static const u16 AnimationStream_In2All[] = { 0, 1, 2, 3, 4};
     194             : static const u16 AnimationStream_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
     195             : static const u16 AnimationStream_Dyn2All[] = { 1};
     196             : 
     197             : static u32 AnimationStream_get_field_count(GF_Node *node, u8 IndexMode)
     198             : {
     199         336 :         switch(IndexMode) {
     200             :         case GF_SG_FIELD_CODING_IN:
     201          54 :                 return 5;
     202             :         case GF_SG_FIELD_CODING_DEF:
     203          56 :                 return 5;
     204             :         case GF_SG_FIELD_CODING_OUT:
     205           0 :                 return 7;
     206             :         case GF_SG_FIELD_CODING_DYN:
     207           0 :                 return 1;
     208             :         default:
     209          58 :                 return 7;
     210             :         }
     211         168 : }
     212             : 
     213             : static GF_Err AnimationStream_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     214             : {
     215         406 :         switch(IndexMode) {
     216             :         case GF_SG_FIELD_CODING_IN:
     217          78 :                 *allField = AnimationStream_In2All[inField];
     218          78 :                 return GF_OK;
     219             :         case GF_SG_FIELD_CODING_DEF:
     220         125 :                 *allField = AnimationStream_Def2All[inField];
     221         125 :                 return GF_OK;
     222             :         case GF_SG_FIELD_CODING_OUT:
     223           0 :                 *allField = AnimationStream_Out2All[inField];
     224           0 :                 return GF_OK;
     225             :         case GF_SG_FIELD_CODING_DYN:
     226           0 :                 *allField = AnimationStream_Dyn2All[inField];
     227           0 :                 return GF_OK;
     228             :         default:
     229           0 :                 return GF_BAD_PARAM;
     230             :         }
     231         203 : }
     232             : static GF_Err AnimationStream_get_field(GF_Node *node, GF_FieldInfo *info)
     233             : {
     234        2204 :         switch (info->fieldIndex) {
     235             :         case 0:
     236         172 :                 info->name = "loop";
     237         172 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     238         172 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     239         172 :                 info->far_ptr = & ((M_AnimationStream *) node)->loop;
     240         172 :                 return GF_OK;
     241             :         case 1:
     242         142 :                 info->name = "speed";
     243         142 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     244         142 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
     245         142 :                 info->far_ptr = & ((M_AnimationStream *) node)->speed;
     246         142 :                 return GF_OK;
     247             :         case 2:
     248         204 :                 info->name = "startTime";
     249         204 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     250         204 :                 info->fieldType = GF_SG_VRML_SFTIME;
     251         204 :                 info->far_ptr = & ((M_AnimationStream *) node)->startTime;
     252         204 :                 return GF_OK;
     253             :         case 3:
     254         204 :                 info->name = "stopTime";
     255         204 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     256         204 :                 info->fieldType = GF_SG_VRML_SFTIME;
     257         204 :                 info->far_ptr = & ((M_AnimationStream *) node)->stopTime;
     258         204 :                 return GF_OK;
     259             :         case 4:
     260         264 :                 info->name = "url";
     261         264 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     262         264 :                 info->fieldType = GF_SG_VRML_MFURL;
     263         264 :                 info->far_ptr = & ((M_AnimationStream *) node)->url;
     264         264 :                 return GF_OK;
     265             :         case 5:
     266          58 :                 info->name = "duration_changed";
     267          58 :                 info->eventType = GF_SG_EVENT_OUT;
     268          58 :                 info->fieldType = GF_SG_VRML_SFTIME;
     269          58 :                 info->far_ptr = & ((M_AnimationStream *) node)->duration_changed;
     270          58 :                 return GF_OK;
     271             :         case 6:
     272          58 :                 info->name = "isActive";
     273          58 :                 info->eventType = GF_SG_EVENT_OUT;
     274          58 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     275          58 :                 info->far_ptr = & ((M_AnimationStream *) node)->isActive;
     276          58 :                 return GF_OK;
     277             :         default:
     278           0 :                 return GF_BAD_PARAM;
     279             :         }
     280        1102 : }
     281             : 
     282             : 
     283             : static s32 AnimationStream_get_field_index_by_name(char *name)
     284             : {
     285         162 :         if (!strcmp("loop", name)) return 0;
     286          69 :         if (!strcmp("speed", name)) return 1;
     287          87 :         if (!strcmp("startTime", name)) return 2;
     288          69 :         if (!strcmp("stopTime", name)) return 3;
     289          66 :         if (!strcmp("url", name)) return 4;
     290           0 :         if (!strcmp("duration_changed", name)) return 5;
     291           0 :         if (!strcmp("isActive", name)) return 6;
     292           0 :         return -1;
     293          77 : }
     294             : static Bool AnimationStream_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     295             : {
     296           0 :         switch (FieldIndex) {
     297             :         case 1:
     298           0 :                 *AType = 7;
     299           0 :                 *QType = 0;
     300           0 :                 *b_min = FIX_MIN;
     301           0 :                 *b_max = FIX_MAX;
     302           0 :                 return 1;
     303             :         default:
     304           0 :                 return 0;
     305             :         }
     306           0 : }
     307             : 
     308             : 
     309             : 
     310             : GF_Node *AnimationStream_Create()
     311             : {
     312             :         M_AnimationStream *p;
     313         378 :         GF_SAFEALLOC(p, M_AnimationStream);
     314         126 :         if(!p) return NULL;
     315         126 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AnimationStream);
     316             : 
     317             :         /*default field values*/
     318         126 :         p->speed = FLT2FIX(1.0);
     319         126 :         p->startTime = 0;
     320         126 :         p->stopTime = 0;
     321         126 :         return (GF_Node *)p;
     322         126 : }
     323             : 
     324             : 
     325             : /*
     326             :         Appearance Node deletion
     327             : */
     328             : 
     329             : static void Appearance_Del(GF_Node *node)
     330             : {
     331       43316 :         M_Appearance *p = (M_Appearance *) node;
     332       21658 :         gf_node_unregister((GF_Node *) p->material, (GF_Node *) p);
     333       21658 :         gf_node_unregister((GF_Node *) p->texture, (GF_Node *) p);
     334       21658 :         gf_node_unregister((GF_Node *) p->textureTransform, (GF_Node *) p);
     335       21658 :         gf_node_free((GF_Node *) p);
     336       21658 : }
     337             : 
     338             : static const u16 Appearance_Def2All[] = { 0, 1, 2};
     339             : static const u16 Appearance_In2All[] = { 0, 1, 2};
     340             : static const u16 Appearance_Out2All[] = { 0, 1, 2};
     341             : 
     342             : static u32 Appearance_get_field_count(GF_Node *node, u8 IndexMode)
     343             : {
     344       38002 :         switch(IndexMode) {
     345             :         case GF_SG_FIELD_CODING_IN:
     346          18 :                 return 3;
     347             :         case GF_SG_FIELD_CODING_DEF:
     348        7523 :                 return 3;
     349             :         case GF_SG_FIELD_CODING_OUT:
     350           9 :                 return 3;
     351             :         case GF_SG_FIELD_CODING_DYN:
     352           0 :                 return 0;
     353             :         default:
     354       11451 :                 return 3;
     355             :         }
     356       19001 : }
     357             : 
     358             : static GF_Err Appearance_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     359             : {
     360       19492 :         switch(IndexMode) {
     361             :         case GF_SG_FIELD_CODING_IN:
     362          14 :                 *allField = Appearance_In2All[inField];
     363          14 :                 return GF_OK;
     364             :         case GF_SG_FIELD_CODING_DEF:
     365        9725 :                 *allField = Appearance_Def2All[inField];
     366        9725 :                 return GF_OK;
     367             :         case GF_SG_FIELD_CODING_OUT:
     368           7 :                 *allField = Appearance_Out2All[inField];
     369           7 :                 return GF_OK;
     370             :         default:
     371           0 :                 return GF_BAD_PARAM;
     372             :         }
     373        9746 : }
     374             : static GF_Err Appearance_get_field(GF_Node *node, GF_FieldInfo *info)
     375             : {
     376      104420 :         switch (info->fieldIndex) {
     377             :         case 0:
     378       23599 :                 info->name = "material";
     379       23599 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     380       23599 :                 info->fieldType = GF_SG_VRML_SFNODE;
     381       23599 :                 info->NDTtype = NDT_SFMaterialNode;
     382       23599 :                 info->far_ptr = & ((M_Appearance *)node)->material;
     383       23599 :                 return GF_OK;
     384             :         case 1:
     385       15009 :                 info->name = "texture";
     386       15009 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     387       15009 :                 info->fieldType = GF_SG_VRML_SFNODE;
     388       15009 :                 info->NDTtype = NDT_SFTextureNode;
     389       15009 :                 info->far_ptr = & ((M_Appearance *)node)->texture;
     390       15009 :                 return GF_OK;
     391             :         case 2:
     392       13602 :                 info->name = "textureTransform";
     393       13602 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     394       13602 :                 info->fieldType = GF_SG_VRML_SFNODE;
     395       13602 :                 info->NDTtype = NDT_SFTextureTransformNode;
     396       13602 :                 info->far_ptr = & ((M_Appearance *)node)->textureTransform;
     397       13602 :                 return GF_OK;
     398             :         default:
     399           0 :                 return GF_BAD_PARAM;
     400             :         }
     401       52210 : }
     402             : 
     403             : 
     404             : static s32 Appearance_get_field_index_by_name(char *name)
     405             : {
     406        9338 :         if (!strcmp("material", name)) return 0;
     407        1200 :         if (!strcmp("texture", name)) return 1;
     408         210 :         if (!strcmp("textureTransform", name)) return 2;
     409          58 :         return -1;
     410        3335 : }
     411             : static Bool Appearance_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     412             : {
     413             :         switch (FieldIndex) {
     414             :         default:
     415           0 :                 return 0;
     416             :         }
     417             : }
     418             : 
     419             : 
     420             : 
     421             : GF_Node *Appearance_Create()
     422             : {
     423             :         M_Appearance *p;
     424       64974 :         GF_SAFEALLOC(p, M_Appearance);
     425       21658 :         if(!p) return NULL;
     426       21658 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Appearance);
     427             : 
     428             :         /*default field values*/
     429       21658 :         return (GF_Node *)p;
     430       21658 : }
     431             : 
     432             : 
     433             : /*
     434             :         AudioBuffer Node deletion
     435             : */
     436             : 
     437             : static void AudioBuffer_Del(GF_Node *node)
     438             : {
     439          36 :         M_AudioBuffer *p = (M_AudioBuffer *) node;
     440          18 :         gf_node_unregister_children((GF_Node *) p, p->children);
     441          18 :         gf_sg_mfint32_del(p->phaseGroup);
     442          18 :         gf_node_free((GF_Node *) p);
     443          18 : }
     444             : 
     445             : static const u16 AudioBuffer_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
     446             : static const u16 AudioBuffer_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
     447             : static const u16 AudioBuffer_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
     448             : static const u16 AudioBuffer_Dyn2All[] = { 1};
     449             : 
     450             : static u32 AudioBuffer_get_field_count(GF_Node *node, u8 IndexMode)
     451             : {
     452         122 :         switch(IndexMode) {
     453             :         case GF_SG_FIELD_CODING_IN:
     454          45 :                 return 8;
     455             :         case GF_SG_FIELD_CODING_DEF:
     456           9 :                 return 8;
     457             :         case GF_SG_FIELD_CODING_OUT:
     458           0 :                 return 10;
     459             :         case GF_SG_FIELD_CODING_DYN:
     460           0 :                 return 1;
     461             :         default:
     462           7 :                 return 10;
     463             :         }
     464          61 : }
     465             : 
     466             : static GF_Err AudioBuffer_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     467             : {
     468         174 :         switch(IndexMode) {
     469             :         case GF_SG_FIELD_CODING_IN:
     470          51 :                 *allField = AudioBuffer_In2All[inField];
     471          51 :                 return GF_OK;
     472             :         case GF_SG_FIELD_CODING_DEF:
     473          36 :                 *allField = AudioBuffer_Def2All[inField];
     474          36 :                 return GF_OK;
     475             :         case GF_SG_FIELD_CODING_OUT:
     476           0 :                 *allField = AudioBuffer_Out2All[inField];
     477           0 :                 return GF_OK;
     478             :         case GF_SG_FIELD_CODING_DYN:
     479           0 :                 *allField = AudioBuffer_Dyn2All[inField];
     480           0 :                 return GF_OK;
     481             :         default:
     482           0 :                 return GF_BAD_PARAM;
     483             :         }
     484          87 : }
     485             : static GF_Err AudioBuffer_get_field(GF_Node *node, GF_FieldInfo *info)
     486             : {
     487         568 :         switch (info->fieldIndex) {
     488             :         case 0:
     489          33 :                 info->name = "loop";
     490          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     491          33 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     492          33 :                 info->far_ptr = & ((M_AudioBuffer *) node)->loop;
     493          33 :                 return GF_OK;
     494             :         case 1:
     495          63 :                 info->name = "pitch";
     496          63 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     497          63 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
     498          63 :                 info->far_ptr = & ((M_AudioBuffer *) node)->pitch;
     499          63 :                 return GF_OK;
     500             :         case 2:
     501          33 :                 info->name = "startTime";
     502          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     503          33 :                 info->fieldType = GF_SG_VRML_SFTIME;
     504          33 :                 info->far_ptr = & ((M_AudioBuffer *) node)->startTime;
     505          33 :                 return GF_OK;
     506             :         case 3:
     507          33 :                 info->name = "stopTime";
     508          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     509          33 :                 info->fieldType = GF_SG_VRML_SFTIME;
     510          33 :                 info->far_ptr = & ((M_AudioBuffer *) node)->stopTime;
     511          33 :                 return GF_OK;
     512             :         case 4:
     513          24 :                 info->name = "children";
     514          24 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     515          24 :                 info->fieldType = GF_SG_VRML_MFNODE;
     516          24 :                 info->NDTtype = NDT_SFAudioNode;
     517          24 :                 info->far_ptr = & ((M_AudioBuffer *)node)->children;
     518          24 :                 return GF_OK;
     519             :         case 5:
     520          33 :                 info->name = "numChan";
     521          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     522          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
     523          33 :                 info->far_ptr = & ((M_AudioBuffer *) node)->numChan;
     524          33 :                 return GF_OK;
     525             :         case 6:
     526          18 :                 info->name = "phaseGroup";
     527          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     528          18 :                 info->fieldType = GF_SG_VRML_MFINT32;
     529          18 :                 info->far_ptr = & ((M_AudioBuffer *) node)->phaseGroup;
     530          18 :                 return GF_OK;
     531             :         case 7:
     532          33 :                 info->name = "length";
     533          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     534          33 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
     535          33 :                 info->far_ptr = & ((M_AudioBuffer *) node)->length;
     536          33 :                 return GF_OK;
     537             :         case 8:
     538           7 :                 info->name = "duration_changed";
     539           7 :                 info->eventType = GF_SG_EVENT_OUT;
     540           7 :                 info->fieldType = GF_SG_VRML_SFTIME;
     541           7 :                 info->far_ptr = & ((M_AudioBuffer *) node)->duration_changed;
     542           7 :                 return GF_OK;
     543             :         case 9:
     544           7 :                 info->name = "isActive";
     545           7 :                 info->eventType = GF_SG_EVENT_OUT;
     546           7 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     547           7 :                 info->far_ptr = & ((M_AudioBuffer *) node)->isActive;
     548           7 :                 return GF_OK;
     549             :         default:
     550           0 :                 return GF_BAD_PARAM;
     551             :         }
     552         284 : }
     553             : 
     554             : 
     555             : static s32 AudioBuffer_get_field_index_by_name(char *name)
     556             : {
     557          76 :         if (!strcmp("loop", name)) return 0;
     558          44 :         if (!strcmp("pitch", name)) return 1;
     559          24 :         if (!strcmp("startTime", name)) return 2;
     560          20 :         if (!strcmp("stopTime", name)) return 3;
     561          16 :         if (!strcmp("children", name)) return 4;
     562          12 :         if (!strcmp("numChan", name)) return 5;
     563           4 :         if (!strcmp("phaseGroup", name)) return 6;
     564           8 :         if (!strcmp("length", name)) return 7;
     565           0 :         if (!strcmp("duration_changed", name)) return 8;
     566           0 :         if (!strcmp("isActive", name)) return 9;
     567           0 :         return -1;
     568          36 : }
     569             : static Bool AudioBuffer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     570             : {
     571           0 :         switch (FieldIndex) {
     572             :         case 1:
     573           0 :                 *AType = 7;
     574           0 :                 *QType = 0;
     575           0 :                 *b_min = FLT2FIX(0);
     576           0 :                 *b_max = FIX_MAX;
     577           0 :                 return 1;
     578             :         case 2:
     579           0 :                 *AType = 0;
     580           0 :                 *QType = 0;
     581           0 :                 *b_min = FLT2FIX(0);
     582           0 :                 *b_max = FIX_MAX;
     583           0 :                 return 1;
     584             :         case 3:
     585           0 :                 *AType = 0;
     586           0 :                 *QType = 0;
     587           0 :                 *b_min = FLT2FIX(0);
     588           0 :                 *b_max = FIX_MAX;
     589           0 :                 return 1;
     590             :         case 5:
     591           0 :                 *AType = 0;
     592           0 :                 *QType = 13;
     593           0 :                 *QT13_bits = 8;
     594           0 :                 *b_min = FLT2FIX(0);
     595           0 :                 *b_max = FLT2FIX(255);
     596           0 :                 return 1;
     597             :         case 7:
     598           0 :                 *AType = 0;
     599           0 :                 *QType = 0;
     600           0 :                 *b_min = FLT2FIX(0);
     601           0 :                 *b_max = FIX_MAX;
     602           0 :                 return 1;
     603             :         default:
     604           0 :                 return 0;
     605             :         }
     606           0 : }
     607             : 
     608             : 
     609             : 
     610             : GF_Node *AudioBuffer_Create()
     611             : {
     612             :         M_AudioBuffer *p;
     613          54 :         GF_SAFEALLOC(p, M_AudioBuffer);
     614          18 :         if(!p) return NULL;
     615          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioBuffer);
     616             : 
     617             :         /*default field values*/
     618          18 :         p->pitch = FLT2FIX(1);
     619          18 :         p->startTime = 0;
     620          18 :         p->stopTime = 0;
     621          18 :         p->numChan = 1;
     622          18 :         p->phaseGroup.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
     623          18 :         p->phaseGroup.count = 1;
     624          18 :         p->phaseGroup.vals[0] = 1;
     625          18 :         p->length = FLT2FIX(0.0);
     626          18 :         return (GF_Node *)p;
     627          18 : }
     628             : 
     629             : 
     630             : /*
     631             :         AudioClip Node deletion
     632             : */
     633             : 
     634             : static void AudioClip_Del(GF_Node *node)
     635             : {
     636         180 :         M_AudioClip *p = (M_AudioClip *) node;
     637          90 :         gf_sg_sfstring_del(p->description);
     638          90 :         gf_sg_mfurl_del(p->url);
     639          90 :         gf_node_free((GF_Node *) p);
     640          90 : }
     641             : 
     642             : static const u16 AudioClip_Def2All[] = { 0, 1, 2, 3, 4, 5};
     643             : static const u16 AudioClip_In2All[] = { 0, 1, 2, 3, 4, 5};
     644             : static const u16 AudioClip_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
     645             : static const u16 AudioClip_Dyn2All[] = { 2};
     646             : 
     647             : static u32 AudioClip_get_field_count(GF_Node *node, u8 IndexMode)
     648             : {
     649         232 :         switch(IndexMode) {
     650             :         case GF_SG_FIELD_CODING_IN:
     651          36 :                 return 6;
     652             :         case GF_SG_FIELD_CODING_DEF:
     653          45 :                 return 6;
     654             :         case GF_SG_FIELD_CODING_OUT:
     655           0 :                 return 8;
     656             :         case GF_SG_FIELD_CODING_DYN:
     657           0 :                 return 1;
     658             :         default:
     659          35 :                 return 8;
     660             :         }
     661         116 : }
     662             : 
     663             : static GF_Err AudioClip_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     664             : {
     665         344 :         switch(IndexMode) {
     666             :         case GF_SG_FIELD_CODING_IN:
     667          62 :                 *allField = AudioClip_In2All[inField];
     668          62 :                 return GF_OK;
     669             :         case GF_SG_FIELD_CODING_DEF:
     670         110 :                 *allField = AudioClip_Def2All[inField];
     671         110 :                 return GF_OK;
     672             :         case GF_SG_FIELD_CODING_OUT:
     673           0 :                 *allField = AudioClip_Out2All[inField];
     674           0 :                 return GF_OK;
     675             :         case GF_SG_FIELD_CODING_DYN:
     676           0 :                 *allField = AudioClip_Dyn2All[inField];
     677           0 :                 return GF_OK;
     678             :         default:
     679           0 :                 return GF_BAD_PARAM;
     680             :         }
     681         172 : }
     682             : static GF_Err AudioClip_get_field(GF_Node *node, GF_FieldInfo *info)
     683             : {
     684        1640 :         switch (info->fieldIndex) {
     685             :         case 0:
     686          90 :                 info->name = "description";
     687          90 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     688          90 :                 info->fieldType = GF_SG_VRML_SFSTRING;
     689          90 :                 info->far_ptr = & ((M_AudioClip *) node)->description;
     690          90 :                 return GF_OK;
     691             :         case 1:
     692         165 :                 info->name = "loop";
     693         165 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     694         165 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     695         165 :                 info->far_ptr = & ((M_AudioClip *) node)->loop;
     696         165 :                 return GF_OK;
     697             :         case 2:
     698          90 :                 info->name = "pitch";
     699          90 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     700          90 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
     701          90 :                 info->far_ptr = & ((M_AudioClip *) node)->pitch;
     702          90 :                 return GF_OK;
     703             :         case 3:
     704         105 :                 info->name = "startTime";
     705         105 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     706         105 :                 info->fieldType = GF_SG_VRML_SFTIME;
     707         105 :                 info->far_ptr = & ((M_AudioClip *) node)->startTime;
     708         105 :                 return GF_OK;
     709             :         case 4:
     710         105 :                 info->name = "stopTime";
     711         105 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     712         105 :                 info->fieldType = GF_SG_VRML_SFTIME;
     713         105 :                 info->far_ptr = & ((M_AudioClip *) node)->stopTime;
     714         105 :                 return GF_OK;
     715             :         case 5:
     716         195 :                 info->name = "url";
     717         195 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     718         195 :                 info->fieldType = GF_SG_VRML_MFURL;
     719         195 :                 info->far_ptr = & ((M_AudioClip *) node)->url;
     720         195 :                 return GF_OK;
     721             :         case 6:
     722          35 :                 info->name = "duration_changed";
     723          35 :                 info->eventType = GF_SG_EVENT_OUT;
     724          35 :                 info->fieldType = GF_SG_VRML_SFTIME;
     725          35 :                 info->far_ptr = & ((M_AudioClip *) node)->duration_changed;
     726          35 :                 return GF_OK;
     727             :         case 7:
     728          35 :                 info->name = "isActive";
     729          35 :                 info->eventType = GF_SG_EVENT_OUT;
     730          35 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     731          35 :                 info->far_ptr = & ((M_AudioClip *) node)->isActive;
     732          35 :                 return GF_OK;
     733             :         default:
     734           0 :                 return GF_BAD_PARAM;
     735             :         }
     736         820 : }
     737             : 
     738             : 
     739             : static s32 AudioClip_get_field_index_by_name(char *name)
     740             : {
     741         112 :         if (!strcmp("description", name)) return 0;
     742          76 :         if (!strcmp("loop", name)) return 1;
     743          36 :         if (!strcmp("pitch", name)) return 2;
     744          40 :         if (!strcmp("startTime", name)) return 3;
     745          36 :         if (!strcmp("stopTime", name)) return 4;
     746          56 :         if (!strcmp("url", name)) return 5;
     747           0 :         if (!strcmp("duration_changed", name)) return 6;
     748           0 :         if (!strcmp("isActive", name)) return 7;
     749           0 :         return -1;
     750          56 : }
     751             : static Bool AudioClip_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     752             : {
     753           0 :         switch (FieldIndex) {
     754             :         case 2:
     755           0 :                 *AType = 7;
     756           0 :                 *QType = 0;
     757           0 :                 *b_min = FLT2FIX(0);
     758           0 :                 *b_max = FIX_MAX;
     759           0 :                 return 1;
     760             :         default:
     761           0 :                 return 0;
     762             :         }
     763           0 : }
     764             : 
     765             : 
     766             : 
     767             : GF_Node *AudioClip_Create()
     768             : {
     769             :         M_AudioClip *p;
     770         270 :         GF_SAFEALLOC(p, M_AudioClip);
     771          90 :         if(!p) return NULL;
     772          90 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioClip);
     773             : 
     774             :         /*default field values*/
     775          90 :         p->pitch = FLT2FIX(1.0);
     776          90 :         p->startTime = 0;
     777          90 :         p->stopTime = 0;
     778          90 :         return (GF_Node *)p;
     779          90 : }
     780             : 
     781             : 
     782             : /*
     783             :         AudioDelay Node deletion
     784             : */
     785             : 
     786             : static void AudioDelay_Del(GF_Node *node)
     787             : {
     788           0 :         M_AudioDelay *p = (M_AudioDelay *) node;
     789           0 :         gf_sg_mfint32_del(p->phaseGroup);
     790           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
     791           0 :         gf_node_free((GF_Node *) p);
     792           0 : }
     793             : 
     794             : static const u16 AudioDelay_Def2All[] = { 2, 3, 4, 5};
     795             : static const u16 AudioDelay_In2All[] = { 0, 1, 2, 3};
     796             : static const u16 AudioDelay_Out2All[] = { 2, 3};
     797             : 
     798             : static u32 AudioDelay_get_field_count(GF_Node *node, u8 IndexMode)
     799             : {
     800           0 :         switch(IndexMode) {
     801             :         case GF_SG_FIELD_CODING_IN:
     802           0 :                 return 4;
     803             :         case GF_SG_FIELD_CODING_DEF:
     804           0 :                 return 4;
     805             :         case GF_SG_FIELD_CODING_OUT:
     806           0 :                 return 2;
     807             :         case GF_SG_FIELD_CODING_DYN:
     808           0 :                 return 0;
     809             :         default:
     810           0 :                 return 6;
     811             :         }
     812           0 : }
     813             : 
     814             : static GF_Err AudioDelay_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     815             : {
     816           0 :         switch(IndexMode) {
     817             :         case GF_SG_FIELD_CODING_IN:
     818           0 :                 *allField = AudioDelay_In2All[inField];
     819           0 :                 return GF_OK;
     820             :         case GF_SG_FIELD_CODING_DEF:
     821           0 :                 *allField = AudioDelay_Def2All[inField];
     822           0 :                 return GF_OK;
     823             :         case GF_SG_FIELD_CODING_OUT:
     824           0 :                 *allField = AudioDelay_Out2All[inField];
     825           0 :                 return GF_OK;
     826             :         default:
     827           0 :                 return GF_BAD_PARAM;
     828             :         }
     829           0 : }
     830             : static GF_Err AudioDelay_get_field(GF_Node *node, GF_FieldInfo *info)
     831             : {
     832           0 :         switch (info->fieldIndex) {
     833             :         case 0:
     834           0 :                 info->name = "addChildren";
     835           0 :                 info->eventType = GF_SG_EVENT_IN;
     836           0 :                 info->on_event_in = ((M_AudioDelay *)node)->on_addChildren;
     837           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
     838           0 :                 info->NDTtype = NDT_SFAudioNode;
     839           0 :                 info->far_ptr = & ((M_AudioDelay *)node)->addChildren;
     840           0 :                 return GF_OK;
     841             :         case 1:
     842           0 :                 info->name = "removeChildren";
     843           0 :                 info->eventType = GF_SG_EVENT_IN;
     844           0 :                 info->on_event_in = ((M_AudioDelay *)node)->on_removeChildren;
     845           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
     846           0 :                 info->NDTtype = NDT_SFAudioNode;
     847           0 :                 info->far_ptr = & ((M_AudioDelay *)node)->removeChildren;
     848           0 :                 return GF_OK;
     849             :         case 2:
     850           0 :                 info->name = "children";
     851           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     852           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
     853           0 :                 info->NDTtype = NDT_SFAudioNode;
     854           0 :                 info->far_ptr = & ((M_AudioDelay *)node)->children;
     855           0 :                 return GF_OK;
     856             :         case 3:
     857           0 :                 info->name = "delay";
     858           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     859           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
     860           0 :                 info->far_ptr = & ((M_AudioDelay *) node)->delay;
     861           0 :                 return GF_OK;
     862             :         case 4:
     863           0 :                 info->name = "numChan";
     864           0 :                 info->eventType = GF_SG_EVENT_FIELD;
     865           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
     866           0 :                 info->far_ptr = & ((M_AudioDelay *) node)->numChan;
     867           0 :                 return GF_OK;
     868             :         case 5:
     869           0 :                 info->name = "phaseGroup";
     870           0 :                 info->eventType = GF_SG_EVENT_FIELD;
     871           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
     872           0 :                 info->far_ptr = & ((M_AudioDelay *) node)->phaseGroup;
     873           0 :                 return GF_OK;
     874             :         default:
     875           0 :                 return GF_BAD_PARAM;
     876             :         }
     877           0 : }
     878             : 
     879             : 
     880             : static s32 AudioDelay_get_field_index_by_name(char *name)
     881             : {
     882           0 :         if (!strcmp("addChildren", name)) return 0;
     883           0 :         if (!strcmp("removeChildren", name)) return 1;
     884           0 :         if (!strcmp("children", name)) return 2;
     885           0 :         if (!strcmp("delay", name)) return 3;
     886           0 :         if (!strcmp("numChan", name)) return 4;
     887           0 :         if (!strcmp("phaseGroup", name)) return 5;
     888           0 :         return -1;
     889           0 : }
     890             : static Bool AudioDelay_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     891             : {
     892           0 :         switch (FieldIndex) {
     893             :         case 4:
     894           0 :                 *AType = 0;
     895           0 :                 *QType = 13;
     896           0 :                 *QT13_bits = 8;
     897           0 :                 *b_min = FLT2FIX(0);
     898           0 :                 *b_max = FLT2FIX(255);
     899           0 :                 return 1;
     900             :         case 5:
     901           0 :                 *AType = 0;
     902           0 :                 *QType = 13;
     903           0 :                 *QT13_bits = 8;
     904           0 :                 *b_min = FLT2FIX(0);
     905           0 :                 *b_max = FLT2FIX(255);
     906           0 :                 return 1;
     907             :         default:
     908           0 :                 return 0;
     909             :         }
     910           0 : }
     911             : 
     912             : 
     913             : 
     914             : GF_Node *AudioDelay_Create()
     915             : {
     916             :         M_AudioDelay *p;
     917           0 :         GF_SAFEALLOC(p, M_AudioDelay);
     918           0 :         if(!p) return NULL;
     919           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioDelay);
     920           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
     921             : 
     922             :         /*default field values*/
     923           0 :         p->delay = 0;
     924           0 :         p->numChan = 1;
     925           0 :         return (GF_Node *)p;
     926           0 : }
     927             : 
     928             : 
     929             : /*
     930             :         AudioFX Node deletion
     931             : */
     932             : 
     933             : static void AudioFX_Del(GF_Node *node)
     934             : {
     935           0 :         M_AudioFX *p = (M_AudioFX *) node;
     936           0 :         gf_sg_sfstring_del(p->orch);
     937           0 :         gf_sg_sfstring_del(p->score);
     938           0 :         gf_sg_mffloat_del(p->params);
     939           0 :         gf_sg_mfint32_del(p->phaseGroup);
     940           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
     941           0 :         gf_node_free((GF_Node *) p);
     942           0 : }
     943             : 
     944             : static const u16 AudioFX_Def2All[] = { 2, 3, 4, 5, 6, 7};
     945             : static const u16 AudioFX_In2All[] = { 0, 1, 2, 3, 4, 5};
     946             : static const u16 AudioFX_Out2All[] = { 2, 3, 4, 5};
     947             : static const u16 AudioFX_Dyn2All[] = { 5};
     948             : 
     949             : static u32 AudioFX_get_field_count(GF_Node *node, u8 IndexMode)
     950             : {
     951           0 :         switch(IndexMode) {
     952             :         case GF_SG_FIELD_CODING_IN:
     953           0 :                 return 6;
     954             :         case GF_SG_FIELD_CODING_DEF:
     955           0 :                 return 6;
     956             :         case GF_SG_FIELD_CODING_OUT:
     957           0 :                 return 4;
     958             :         case GF_SG_FIELD_CODING_DYN:
     959           0 :                 return 1;
     960             :         default:
     961           0 :                 return 8;
     962             :         }
     963           0 : }
     964             : 
     965             : static GF_Err AudioFX_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     966             : {
     967           0 :         switch(IndexMode) {
     968             :         case GF_SG_FIELD_CODING_IN:
     969           0 :                 *allField = AudioFX_In2All[inField];
     970           0 :                 return GF_OK;
     971             :         case GF_SG_FIELD_CODING_DEF:
     972           0 :                 *allField = AudioFX_Def2All[inField];
     973           0 :                 return GF_OK;
     974             :         case GF_SG_FIELD_CODING_OUT:
     975           0 :                 *allField = AudioFX_Out2All[inField];
     976           0 :                 return GF_OK;
     977             :         case GF_SG_FIELD_CODING_DYN:
     978           0 :                 *allField = AudioFX_Dyn2All[inField];
     979           0 :                 return GF_OK;
     980             :         default:
     981           0 :                 return GF_BAD_PARAM;
     982             :         }
     983           0 : }
     984             : static GF_Err AudioFX_get_field(GF_Node *node, GF_FieldInfo *info)
     985             : {
     986           0 :         switch (info->fieldIndex) {
     987             :         case 0:
     988           0 :                 info->name = "addChildren";
     989           0 :                 info->eventType = GF_SG_EVENT_IN;
     990           0 :                 info->on_event_in = ((M_AudioFX *)node)->on_addChildren;
     991           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
     992           0 :                 info->NDTtype = NDT_SFAudioNode;
     993           0 :                 info->far_ptr = & ((M_AudioFX *)node)->addChildren;
     994           0 :                 return GF_OK;
     995             :         case 1:
     996           0 :                 info->name = "removeChildren";
     997           0 :                 info->eventType = GF_SG_EVENT_IN;
     998           0 :                 info->on_event_in = ((M_AudioFX *)node)->on_removeChildren;
     999           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1000           0 :                 info->NDTtype = NDT_SFAudioNode;
    1001           0 :                 info->far_ptr = & ((M_AudioFX *)node)->removeChildren;
    1002           0 :                 return GF_OK;
    1003             :         case 2:
    1004           0 :                 info->name = "children";
    1005           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1006           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1007           0 :                 info->NDTtype = NDT_SFAudioNode;
    1008           0 :                 info->far_ptr = & ((M_AudioFX *)node)->children;
    1009           0 :                 return GF_OK;
    1010             :         case 3:
    1011           0 :                 info->name = "orch";
    1012           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1013           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    1014           0 :                 info->far_ptr = & ((M_AudioFX *) node)->orch;
    1015           0 :                 return GF_OK;
    1016             :         case 4:
    1017           0 :                 info->name = "score";
    1018           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1019           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    1020           0 :                 info->far_ptr = & ((M_AudioFX *) node)->score;
    1021           0 :                 return GF_OK;
    1022             :         case 5:
    1023           0 :                 info->name = "params";
    1024           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1025           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    1026           0 :                 info->far_ptr = & ((M_AudioFX *) node)->params;
    1027           0 :                 return GF_OK;
    1028             :         case 6:
    1029           0 :                 info->name = "numChan";
    1030           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    1031           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1032           0 :                 info->far_ptr = & ((M_AudioFX *) node)->numChan;
    1033           0 :                 return GF_OK;
    1034             :         case 7:
    1035           0 :                 info->name = "phaseGroup";
    1036           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    1037           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1038           0 :                 info->far_ptr = & ((M_AudioFX *) node)->phaseGroup;
    1039           0 :                 return GF_OK;
    1040             :         default:
    1041           0 :                 return GF_BAD_PARAM;
    1042             :         }
    1043           0 : }
    1044             : 
    1045             : 
    1046             : static s32 AudioFX_get_field_index_by_name(char *name)
    1047             : {
    1048           0 :         if (!strcmp("addChildren", name)) return 0;
    1049           0 :         if (!strcmp("removeChildren", name)) return 1;
    1050           0 :         if (!strcmp("children", name)) return 2;
    1051           0 :         if (!strcmp("orch", name)) return 3;
    1052           0 :         if (!strcmp("score", name)) return 4;
    1053           0 :         if (!strcmp("params", name)) return 5;
    1054           0 :         if (!strcmp("numChan", name)) return 6;
    1055           0 :         if (!strcmp("phaseGroup", name)) return 7;
    1056           0 :         return -1;
    1057           0 : }
    1058             : static Bool AudioFX_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1059             : {
    1060           0 :         switch (FieldIndex) {
    1061             :         case 5:
    1062           0 :                 *AType = 7;
    1063           0 :                 *QType = 0;
    1064           0 :                 *b_min = FIX_MIN;
    1065           0 :                 *b_max = FIX_MAX;
    1066           0 :                 return 1;
    1067             :         case 6:
    1068           0 :                 *AType = 0;
    1069           0 :                 *QType = 13;
    1070           0 :                 *QT13_bits = 8;
    1071           0 :                 *b_min = FLT2FIX(0);
    1072           0 :                 *b_max = FLT2FIX(255);
    1073           0 :                 return 1;
    1074             :         case 7:
    1075           0 :                 *AType = 0;
    1076           0 :                 *QType = 13;
    1077           0 :                 *QT13_bits = 8;
    1078           0 :                 *b_min = FLT2FIX(0);
    1079           0 :                 *b_max = FLT2FIX(255);
    1080           0 :                 return 1;
    1081             :         default:
    1082           0 :                 return 0;
    1083             :         }
    1084           0 : }
    1085             : 
    1086             : 
    1087             : 
    1088             : GF_Node *AudioFX_Create()
    1089             : {
    1090             :         M_AudioFX *p;
    1091           0 :         GF_SAFEALLOC(p, M_AudioFX);
    1092           0 :         if(!p) return NULL;
    1093           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioFX);
    1094           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    1095             : 
    1096             :         /*default field values*/
    1097           0 :         p->numChan = 1;
    1098           0 :         return (GF_Node *)p;
    1099           0 : }
    1100             : 
    1101             : 
    1102             : /*
    1103             :         AudioMix Node deletion
    1104             : */
    1105             : 
    1106             : static void AudioMix_Del(GF_Node *node)
    1107             : {
    1108           0 :         M_AudioMix *p = (M_AudioMix *) node;
    1109           0 :         gf_sg_mffloat_del(p->matrix);
    1110           0 :         gf_sg_mfint32_del(p->phaseGroup);
    1111           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    1112           0 :         gf_node_free((GF_Node *) p);
    1113           0 : }
    1114             : 
    1115             : static const u16 AudioMix_Def2All[] = { 2, 3, 4, 5, 6};
    1116             : static const u16 AudioMix_In2All[] = { 0, 1, 2, 3, 4};
    1117             : static const u16 AudioMix_Out2All[] = { 2, 3, 4};
    1118             : static const u16 AudioMix_Dyn2All[] = { 4};
    1119             : 
    1120             : static u32 AudioMix_get_field_count(GF_Node *node, u8 IndexMode)
    1121             : {
    1122           0 :         switch(IndexMode) {
    1123             :         case GF_SG_FIELD_CODING_IN:
    1124           0 :                 return 5;
    1125             :         case GF_SG_FIELD_CODING_DEF:
    1126           0 :                 return 5;
    1127             :         case GF_SG_FIELD_CODING_OUT:
    1128           0 :                 return 3;
    1129             :         case GF_SG_FIELD_CODING_DYN:
    1130           0 :                 return 1;
    1131             :         default:
    1132           0 :                 return 7;
    1133             :         }
    1134           0 : }
    1135             : 
    1136             : static GF_Err AudioMix_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1137             : {
    1138           0 :         switch(IndexMode) {
    1139             :         case GF_SG_FIELD_CODING_IN:
    1140           0 :                 *allField = AudioMix_In2All[inField];
    1141           0 :                 return GF_OK;
    1142             :         case GF_SG_FIELD_CODING_DEF:
    1143           0 :                 *allField = AudioMix_Def2All[inField];
    1144           0 :                 return GF_OK;
    1145             :         case GF_SG_FIELD_CODING_OUT:
    1146           0 :                 *allField = AudioMix_Out2All[inField];
    1147           0 :                 return GF_OK;
    1148             :         case GF_SG_FIELD_CODING_DYN:
    1149           0 :                 *allField = AudioMix_Dyn2All[inField];
    1150           0 :                 return GF_OK;
    1151             :         default:
    1152           0 :                 return GF_BAD_PARAM;
    1153             :         }
    1154           0 : }
    1155             : static GF_Err AudioMix_get_field(GF_Node *node, GF_FieldInfo *info)
    1156             : {
    1157           0 :         switch (info->fieldIndex) {
    1158             :         case 0:
    1159           0 :                 info->name = "addChildren";
    1160           0 :                 info->eventType = GF_SG_EVENT_IN;
    1161           0 :                 info->on_event_in = ((M_AudioMix *)node)->on_addChildren;
    1162           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1163           0 :                 info->NDTtype = NDT_SFAudioNode;
    1164           0 :                 info->far_ptr = & ((M_AudioMix *)node)->addChildren;
    1165           0 :                 return GF_OK;
    1166             :         case 1:
    1167           0 :                 info->name = "removeChildren";
    1168           0 :                 info->eventType = GF_SG_EVENT_IN;
    1169           0 :                 info->on_event_in = ((M_AudioMix *)node)->on_removeChildren;
    1170           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1171           0 :                 info->NDTtype = NDT_SFAudioNode;
    1172           0 :                 info->far_ptr = & ((M_AudioMix *)node)->removeChildren;
    1173           0 :                 return GF_OK;
    1174             :         case 2:
    1175           0 :                 info->name = "children";
    1176           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1177           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1178           0 :                 info->NDTtype = NDT_SFAudioNode;
    1179           0 :                 info->far_ptr = & ((M_AudioMix *)node)->children;
    1180           0 :                 return GF_OK;
    1181             :         case 3:
    1182           0 :                 info->name = "numInputs";
    1183           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1184           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1185           0 :                 info->far_ptr = & ((M_AudioMix *) node)->numInputs;
    1186           0 :                 return GF_OK;
    1187             :         case 4:
    1188           0 :                 info->name = "matrix";
    1189           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1190           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    1191           0 :                 info->far_ptr = & ((M_AudioMix *) node)->matrix;
    1192           0 :                 return GF_OK;
    1193             :         case 5:
    1194           0 :                 info->name = "numChan";
    1195           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    1196           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1197           0 :                 info->far_ptr = & ((M_AudioMix *) node)->numChan;
    1198           0 :                 return GF_OK;
    1199             :         case 6:
    1200           0 :                 info->name = "phaseGroup";
    1201           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    1202           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1203           0 :                 info->far_ptr = & ((M_AudioMix *) node)->phaseGroup;
    1204           0 :                 return GF_OK;
    1205             :         default:
    1206           0 :                 return GF_BAD_PARAM;
    1207             :         }
    1208           0 : }
    1209             : 
    1210             : 
    1211             : static s32 AudioMix_get_field_index_by_name(char *name)
    1212             : {
    1213           0 :         if (!strcmp("addChildren", name)) return 0;
    1214           0 :         if (!strcmp("removeChildren", name)) return 1;
    1215           0 :         if (!strcmp("children", name)) return 2;
    1216           0 :         if (!strcmp("numInputs", name)) return 3;
    1217           0 :         if (!strcmp("matrix", name)) return 4;
    1218           0 :         if (!strcmp("numChan", name)) return 5;
    1219           0 :         if (!strcmp("phaseGroup", name)) return 6;
    1220           0 :         return -1;
    1221           0 : }
    1222             : static Bool AudioMix_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1223             : {
    1224           0 :         switch (FieldIndex) {
    1225             :         case 3:
    1226           0 :                 *AType = 0;
    1227           0 :                 *QType = 13;
    1228           0 :                 *QT13_bits = 8;
    1229           0 :                 *b_min = FLT2FIX(1);
    1230           0 :                 *b_max = FLT2FIX(255);
    1231           0 :                 return 1;
    1232             :         case 4:
    1233           0 :                 *AType = 7;
    1234           0 :                 *QType = 0;
    1235           0 :                 *b_min = FLT2FIX(0);
    1236           0 :                 *b_max = FLT2FIX(1);
    1237           0 :                 return 1;
    1238             :         case 5:
    1239           0 :                 *AType = 0;
    1240           0 :                 *QType = 13;
    1241           0 :                 *QT13_bits = 8;
    1242           0 :                 *b_min = FLT2FIX(0);
    1243           0 :                 *b_max = FLT2FIX(255);
    1244           0 :                 return 1;
    1245             :         case 6:
    1246           0 :                 *AType = 0;
    1247           0 :                 *QType = 13;
    1248           0 :                 *QT13_bits = 8;
    1249           0 :                 *b_min = FLT2FIX(0);
    1250           0 :                 *b_max = FLT2FIX(255);
    1251           0 :                 return 1;
    1252             :         default:
    1253           0 :                 return 0;
    1254             :         }
    1255           0 : }
    1256             : 
    1257             : 
    1258             : 
    1259             : GF_Node *AudioMix_Create()
    1260             : {
    1261             :         M_AudioMix *p;
    1262           0 :         GF_SAFEALLOC(p, M_AudioMix);
    1263           0 :         if(!p) return NULL;
    1264           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioMix);
    1265           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    1266             : 
    1267             :         /*default field values*/
    1268           0 :         p->numInputs = 1;
    1269           0 :         p->numChan = 1;
    1270           0 :         return (GF_Node *)p;
    1271           0 : }
    1272             : 
    1273             : 
    1274             : /*
    1275             :         AudioSource Node deletion
    1276             : */
    1277             : 
    1278             : static void AudioSource_Del(GF_Node *node)
    1279             : {
    1280         250 :         M_AudioSource *p = (M_AudioSource *) node;
    1281         125 :         gf_sg_mfurl_del(p->url);
    1282         125 :         gf_sg_mfint32_del(p->phaseGroup);
    1283         125 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    1284         125 :         gf_node_free((GF_Node *) p);
    1285         125 : }
    1286             : 
    1287             : static const u16 AudioSource_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9};
    1288             : static const u16 AudioSource_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
    1289             : static const u16 AudioSource_Out2All[] = { 2, 3, 4, 5, 6, 7};
    1290             : static const u16 AudioSource_Dyn2All[] = { 4, 5};
    1291             : 
    1292             : static u32 AudioSource_get_field_count(GF_Node *node, u8 IndexMode)
    1293             : {
    1294         344 :         switch(IndexMode) {
    1295             :         case GF_SG_FIELD_CODING_IN:
    1296          54 :                 return 8;
    1297             :         case GF_SG_FIELD_CODING_DEF:
    1298          63 :                 return 8;
    1299             :         case GF_SG_FIELD_CODING_OUT:
    1300           0 :                 return 6;
    1301             :         case GF_SG_FIELD_CODING_DYN:
    1302           0 :                 return 2;
    1303             :         default:
    1304          55 :                 return 10;
    1305             :         }
    1306         172 : }
    1307             : 
    1308             : static GF_Err AudioSource_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1309             : {
    1310         536 :         switch(IndexMode) {
    1311             :         case GF_SG_FIELD_CODING_IN:
    1312         104 :                 *allField = AudioSource_In2All[inField];
    1313         104 :                 return GF_OK;
    1314             :         case GF_SG_FIELD_CODING_DEF:
    1315         164 :                 *allField = AudioSource_Def2All[inField];
    1316         164 :                 return GF_OK;
    1317             :         case GF_SG_FIELD_CODING_OUT:
    1318           0 :                 *allField = AudioSource_Out2All[inField];
    1319           0 :                 return GF_OK;
    1320             :         case GF_SG_FIELD_CODING_DYN:
    1321           0 :                 *allField = AudioSource_Dyn2All[inField];
    1322           0 :                 return GF_OK;
    1323             :         default:
    1324           0 :                 return GF_BAD_PARAM;
    1325             :         }
    1326         268 : }
    1327             : static GF_Err AudioSource_get_field(GF_Node *node, GF_FieldInfo *info)
    1328             : {
    1329        2630 :         switch (info->fieldIndex) {
    1330             :         case 0:
    1331          48 :                 info->name = "addChildren";
    1332          48 :                 info->eventType = GF_SG_EVENT_IN;
    1333          48 :                 info->on_event_in = ((M_AudioSource *)node)->on_addChildren;
    1334          48 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1335          48 :                 info->NDTtype = NDT_SFAudioNode;
    1336          48 :                 info->far_ptr = & ((M_AudioSource *)node)->addChildren;
    1337          48 :                 return GF_OK;
    1338             :         case 1:
    1339          48 :                 info->name = "removeChildren";
    1340          48 :                 info->eventType = GF_SG_EVENT_IN;
    1341          48 :                 info->on_event_in = ((M_AudioSource *)node)->on_removeChildren;
    1342          48 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1343          48 :                 info->NDTtype = NDT_SFAudioNode;
    1344          48 :                 info->far_ptr = & ((M_AudioSource *)node)->removeChildren;
    1345          48 :                 return GF_OK;
    1346             :         case 2:
    1347          61 :                 info->name = "children";
    1348          61 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1349          61 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1350          61 :                 info->NDTtype = NDT_SFAudioNode;
    1351          61 :                 info->far_ptr = & ((M_AudioSource *)node)->children;
    1352          61 :                 return GF_OK;
    1353             :         case 3:
    1354         258 :                 info->name = "url";
    1355         258 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1356         258 :                 info->fieldType = GF_SG_VRML_MFURL;
    1357         258 :                 info->far_ptr = & ((M_AudioSource *) node)->url;
    1358         258 :                 return GF_OK;
    1359             :         case 4:
    1360         122 :                 info->name = "pitch";
    1361         122 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1362         122 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    1363         122 :                 info->far_ptr = & ((M_AudioSource *) node)->pitch;
    1364         122 :                 return GF_OK;
    1365             :         case 5:
    1366         122 :                 info->name = "speed";
    1367         122 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1368         122 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    1369         122 :                 info->far_ptr = & ((M_AudioSource *) node)->speed;
    1370         122 :                 return GF_OK;
    1371             :         case 6:
    1372         169 :                 info->name = "startTime";
    1373         169 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1374         169 :                 info->fieldType = GF_SG_VRML_SFTIME;
    1375         169 :                 info->far_ptr = & ((M_AudioSource *) node)->startTime;
    1376         169 :                 return GF_OK;
    1377             :         case 7:
    1378         214 :                 info->name = "stopTime";
    1379         214 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1380         214 :                 info->fieldType = GF_SG_VRML_SFTIME;
    1381         214 :                 info->far_ptr = & ((M_AudioSource *) node)->stopTime;
    1382         214 :                 return GF_OK;
    1383             :         case 8:
    1384         151 :                 info->name = "numChan";
    1385         151 :                 info->eventType = GF_SG_EVENT_FIELD;
    1386         151 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1387         151 :                 info->far_ptr = & ((M_AudioSource *) node)->numChan;
    1388         151 :                 return GF_OK;
    1389             :         case 9:
    1390         122 :                 info->name = "phaseGroup";
    1391         122 :                 info->eventType = GF_SG_EVENT_FIELD;
    1392         122 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1393         122 :                 info->far_ptr = & ((M_AudioSource *) node)->phaseGroup;
    1394         122 :                 return GF_OK;
    1395             :         default:
    1396           0 :                 return GF_BAD_PARAM;
    1397             :         }
    1398        1315 : }
    1399             : 
    1400             : 
    1401             : static s32 AudioSource_get_field_index_by_name(char *name)
    1402             : {
    1403         168 :         if (!strcmp("addChildren", name)) return 0;
    1404          84 :         if (!strcmp("removeChildren", name)) return 1;
    1405          84 :         if (!strcmp("children", name)) return 2;
    1406         121 :         if (!strcmp("url", name)) return 3;
    1407          47 :         if (!strcmp("pitch", name)) return 4;
    1408          47 :         if (!strcmp("speed", name)) return 5;
    1409          61 :         if (!strcmp("startTime", name)) return 6;
    1410          58 :         if (!strcmp("stopTime", name)) return 7;
    1411          16 :         if (!strcmp("numChan", name)) return 8;
    1412           0 :         if (!strcmp("phaseGroup", name)) return 9;
    1413           0 :         return -1;
    1414          84 : }
    1415             : static Bool AudioSource_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1416             : {
    1417           0 :         switch (FieldIndex) {
    1418             :         case 4:
    1419           0 :                 *AType = 7;
    1420           0 :                 *QType = 0;
    1421           0 :                 *b_min = FLT2FIX(0);
    1422           0 :                 *b_max = FIX_MAX;
    1423           0 :                 return 1;
    1424             :         case 5:
    1425           0 :                 *AType = 7;
    1426           0 :                 *QType = 0;
    1427           0 :                 *b_min = FLT2FIX(0);
    1428           0 :                 *b_max = FIX_MAX;
    1429           0 :                 return 1;
    1430             :         case 8:
    1431           0 :                 *AType = 0;
    1432           0 :                 *QType = 13;
    1433           0 :                 *QT13_bits = 8;
    1434           0 :                 *b_min = FLT2FIX(0);
    1435           0 :                 *b_max = FLT2FIX(255);
    1436           0 :                 return 1;
    1437             :         case 9:
    1438           0 :                 *AType = 0;
    1439           0 :                 *QType = 13;
    1440           0 :                 *QT13_bits = 8;
    1441           0 :                 *b_min = FLT2FIX(0);
    1442           0 :                 *b_max = FLT2FIX(255);
    1443           0 :                 return 1;
    1444             :         default:
    1445           0 :                 return 0;
    1446             :         }
    1447           0 : }
    1448             : 
    1449             : 
    1450             : 
    1451             : GF_Node *AudioSource_Create()
    1452             : {
    1453             :         M_AudioSource *p;
    1454         375 :         GF_SAFEALLOC(p, M_AudioSource);
    1455         125 :         if(!p) return NULL;
    1456         125 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioSource);
    1457         125 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    1458             : 
    1459             :         /*default field values*/
    1460         125 :         p->pitch = FLT2FIX(1);
    1461         125 :         p->speed = FLT2FIX(1);
    1462         125 :         p->startTime = 0;
    1463         125 :         p->stopTime = 0;
    1464         125 :         p->numChan = 1;
    1465         125 :         return (GF_Node *)p;
    1466         125 : }
    1467             : 
    1468             : 
    1469             : /*
    1470             :         AudioSwitch Node deletion
    1471             : */
    1472             : 
    1473             : static void AudioSwitch_Del(GF_Node *node)
    1474             : {
    1475           0 :         M_AudioSwitch *p = (M_AudioSwitch *) node;
    1476           0 :         gf_sg_mfint32_del(p->whichChoice);
    1477           0 :         gf_sg_mfint32_del(p->phaseGroup);
    1478           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    1479           0 :         gf_node_free((GF_Node *) p);
    1480           0 : }
    1481             : 
    1482             : static const u16 AudioSwitch_Def2All[] = { 2, 3, 4, 5};
    1483             : static const u16 AudioSwitch_In2All[] = { 0, 1, 2, 3};
    1484             : static const u16 AudioSwitch_Out2All[] = { 2, 3};
    1485             : 
    1486             : static u32 AudioSwitch_get_field_count(GF_Node *node, u8 IndexMode)
    1487             : {
    1488           0 :         switch(IndexMode) {
    1489             :         case GF_SG_FIELD_CODING_IN:
    1490           0 :                 return 4;
    1491             :         case GF_SG_FIELD_CODING_DEF:
    1492           0 :                 return 4;
    1493             :         case GF_SG_FIELD_CODING_OUT:
    1494           0 :                 return 2;
    1495             :         case GF_SG_FIELD_CODING_DYN:
    1496           0 :                 return 0;
    1497             :         default:
    1498           0 :                 return 6;
    1499             :         }
    1500           0 : }
    1501             : 
    1502             : static GF_Err AudioSwitch_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1503             : {
    1504           0 :         switch(IndexMode) {
    1505             :         case GF_SG_FIELD_CODING_IN:
    1506           0 :                 *allField = AudioSwitch_In2All[inField];
    1507           0 :                 return GF_OK;
    1508             :         case GF_SG_FIELD_CODING_DEF:
    1509           0 :                 *allField = AudioSwitch_Def2All[inField];
    1510           0 :                 return GF_OK;
    1511             :         case GF_SG_FIELD_CODING_OUT:
    1512           0 :                 *allField = AudioSwitch_Out2All[inField];
    1513           0 :                 return GF_OK;
    1514             :         default:
    1515           0 :                 return GF_BAD_PARAM;
    1516             :         }
    1517           0 : }
    1518             : static GF_Err AudioSwitch_get_field(GF_Node *node, GF_FieldInfo *info)
    1519             : {
    1520           0 :         switch (info->fieldIndex) {
    1521             :         case 0:
    1522           0 :                 info->name = "addChildren";
    1523           0 :                 info->eventType = GF_SG_EVENT_IN;
    1524           0 :                 info->on_event_in = ((M_AudioSwitch *)node)->on_addChildren;
    1525           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1526           0 :                 info->NDTtype = NDT_SFAudioNode;
    1527           0 :                 info->far_ptr = & ((M_AudioSwitch *)node)->addChildren;
    1528           0 :                 return GF_OK;
    1529             :         case 1:
    1530           0 :                 info->name = "removeChildren";
    1531           0 :                 info->eventType = GF_SG_EVENT_IN;
    1532           0 :                 info->on_event_in = ((M_AudioSwitch *)node)->on_removeChildren;
    1533           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1534           0 :                 info->NDTtype = NDT_SFAudioNode;
    1535           0 :                 info->far_ptr = & ((M_AudioSwitch *)node)->removeChildren;
    1536           0 :                 return GF_OK;
    1537             :         case 2:
    1538           0 :                 info->name = "children";
    1539           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1540           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1541           0 :                 info->NDTtype = NDT_SFAudioNode;
    1542           0 :                 info->far_ptr = & ((M_AudioSwitch *)node)->children;
    1543           0 :                 return GF_OK;
    1544             :         case 3:
    1545           0 :                 info->name = "whichChoice";
    1546           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1547           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1548           0 :                 info->far_ptr = & ((M_AudioSwitch *) node)->whichChoice;
    1549           0 :                 return GF_OK;
    1550             :         case 4:
    1551           0 :                 info->name = "numChan";
    1552           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    1553           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1554           0 :                 info->far_ptr = & ((M_AudioSwitch *) node)->numChan;
    1555           0 :                 return GF_OK;
    1556             :         case 5:
    1557           0 :                 info->name = "phaseGroup";
    1558           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    1559           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1560           0 :                 info->far_ptr = & ((M_AudioSwitch *) node)->phaseGroup;
    1561           0 :                 return GF_OK;
    1562             :         default:
    1563           0 :                 return GF_BAD_PARAM;
    1564             :         }
    1565           0 : }
    1566             : 
    1567             : 
    1568             : static s32 AudioSwitch_get_field_index_by_name(char *name)
    1569             : {
    1570           0 :         if (!strcmp("addChildren", name)) return 0;
    1571           0 :         if (!strcmp("removeChildren", name)) return 1;
    1572           0 :         if (!strcmp("children", name)) return 2;
    1573           0 :         if (!strcmp("whichChoice", name)) return 3;
    1574           0 :         if (!strcmp("numChan", name)) return 4;
    1575           0 :         if (!strcmp("phaseGroup", name)) return 5;
    1576           0 :         return -1;
    1577           0 : }
    1578             : static Bool AudioSwitch_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1579             : {
    1580           0 :         switch (FieldIndex) {
    1581             :         case 3:
    1582           0 :                 *AType = 0;
    1583           0 :                 *QType = 13;
    1584           0 :                 *QT13_bits = 1;
    1585           0 :                 *b_min = FLT2FIX(0);
    1586           0 :                 *b_max = FLT2FIX(1);
    1587           0 :                 return 1;
    1588             :         case 4:
    1589           0 :                 *AType = 0;
    1590           0 :                 *QType = 13;
    1591           0 :                 *QT13_bits = 8;
    1592           0 :                 *b_min = FLT2FIX(0);
    1593           0 :                 *b_max = FLT2FIX(255);
    1594           0 :                 return 1;
    1595             :         case 5:
    1596           0 :                 *AType = 0;
    1597           0 :                 *QType = 13;
    1598           0 :                 *QT13_bits = 8;
    1599           0 :                 *b_min = FLT2FIX(0);
    1600           0 :                 *b_max = FLT2FIX(255);
    1601           0 :                 return 1;
    1602             :         default:
    1603           0 :                 return 0;
    1604             :         }
    1605           0 : }
    1606             : 
    1607             : 
    1608             : 
    1609             : GF_Node *AudioSwitch_Create()
    1610             : {
    1611             :         M_AudioSwitch *p;
    1612           0 :         GF_SAFEALLOC(p, M_AudioSwitch);
    1613           0 :         if(!p) return NULL;
    1614           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioSwitch);
    1615           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    1616             : 
    1617             :         /*default field values*/
    1618           0 :         p->numChan = 1;
    1619           0 :         return (GF_Node *)p;
    1620           0 : }
    1621             : 
    1622             : 
    1623             : /*
    1624             :         Background Node deletion
    1625             : */
    1626             : 
    1627             : static void Background_Del(GF_Node *node)
    1628             : {
    1629         122 :         M_Background *p = (M_Background *) node;
    1630          61 :         gf_sg_mffloat_del(p->groundAngle);
    1631          61 :         gf_sg_mfcolor_del(p->groundColor);
    1632          61 :         gf_sg_mfurl_del(p->backUrl);
    1633          61 :         gf_sg_mfurl_del(p->bottomUrl);
    1634          61 :         gf_sg_mfurl_del(p->frontUrl);
    1635          61 :         gf_sg_mfurl_del(p->leftUrl);
    1636          61 :         gf_sg_mfurl_del(p->rightUrl);
    1637          61 :         gf_sg_mfurl_del(p->topUrl);
    1638          61 :         gf_sg_mffloat_del(p->skyAngle);
    1639          61 :         gf_sg_mfcolor_del(p->skyColor);
    1640          61 :         gf_node_free((GF_Node *) p);
    1641          61 : }
    1642             : 
    1643             : static const u16 Background_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    1644             : static const u16 Background_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    1645             : static const u16 Background_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
    1646             : static const u16 Background_Dyn2All[] = { 1, 2, 9, 10};
    1647             : 
    1648             : static u32 Background_get_field_count(GF_Node *node, u8 IndexMode)
    1649             : {
    1650         124 :         switch(IndexMode) {
    1651             :         case GF_SG_FIELD_CODING_IN:
    1652           9 :                 return 11;
    1653             :         case GF_SG_FIELD_CODING_DEF:
    1654          27 :                 return 10;
    1655             :         case GF_SG_FIELD_CODING_OUT:
    1656           0 :                 return 11;
    1657             :         case GF_SG_FIELD_CODING_DYN:
    1658           0 :                 return 4;
    1659             :         default:
    1660          26 :                 return 12;
    1661             :         }
    1662          62 : }
    1663             : 
    1664             : static GF_Err Background_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1665             : {
    1666         284 :         switch(IndexMode) {
    1667             :         case GF_SG_FIELD_CODING_IN:
    1668           7 :                 *allField = Background_In2All[inField];
    1669           7 :                 return GF_OK;
    1670             :         case GF_SG_FIELD_CODING_DEF:
    1671         135 :                 *allField = Background_Def2All[inField];
    1672         135 :                 return GF_OK;
    1673             :         case GF_SG_FIELD_CODING_OUT:
    1674           0 :                 *allField = Background_Out2All[inField];
    1675           0 :                 return GF_OK;
    1676             :         case GF_SG_FIELD_CODING_DYN:
    1677           0 :                 *allField = Background_Dyn2All[inField];
    1678           0 :                 return GF_OK;
    1679             :         default:
    1680           0 :                 return GF_BAD_PARAM;
    1681             :         }
    1682         142 : }
    1683             : static GF_Err Background_get_field(GF_Node *node, GF_FieldInfo *info)
    1684             : {
    1685        1870 :         switch (info->fieldIndex) {
    1686             :         case 0:
    1687          44 :                 info->name = "set_bind";
    1688          44 :                 info->eventType = GF_SG_EVENT_IN;
    1689          44 :                 info->on_event_in = ((M_Background *)node)->on_set_bind;
    1690          44 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    1691          44 :                 info->far_ptr = & ((M_Background *) node)->set_bind;
    1692          44 :                 return GF_OK;
    1693             :         case 1:
    1694          94 :                 info->name = "groundAngle";
    1695          94 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1696          94 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    1697          94 :                 info->far_ptr = & ((M_Background *) node)->groundAngle;
    1698          94 :                 return GF_OK;
    1699             :         case 2:
    1700          94 :                 info->name = "groundColor";
    1701          94 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1702          94 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
    1703          94 :                 info->far_ptr = & ((M_Background *) node)->groundColor;
    1704          94 :                 return GF_OK;
    1705             :         case 3:
    1706          79 :                 info->name = "backUrl";
    1707          79 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1708          79 :                 info->fieldType = GF_SG_VRML_MFURL;
    1709          79 :                 info->far_ptr = & ((M_Background *) node)->backUrl;
    1710          79 :                 return GF_OK;
    1711             :         case 4:
    1712          79 :                 info->name = "bottomUrl";
    1713          79 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1714          79 :                 info->fieldType = GF_SG_VRML_MFURL;
    1715          79 :                 info->far_ptr = & ((M_Background *) node)->bottomUrl;
    1716          79 :                 return GF_OK;
    1717             :         case 5:
    1718          94 :                 info->name = "frontUrl";
    1719          94 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1720          94 :                 info->fieldType = GF_SG_VRML_MFURL;
    1721          94 :                 info->far_ptr = & ((M_Background *) node)->frontUrl;
    1722          94 :                 return GF_OK;
    1723             :         case 6:
    1724          79 :                 info->name = "leftUrl";
    1725          79 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1726          79 :                 info->fieldType = GF_SG_VRML_MFURL;
    1727          79 :                 info->far_ptr = & ((M_Background *) node)->leftUrl;
    1728          79 :                 return GF_OK;
    1729             :         case 7:
    1730          79 :                 info->name = "rightUrl";
    1731          79 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1732          79 :                 info->fieldType = GF_SG_VRML_MFURL;
    1733          79 :                 info->far_ptr = & ((M_Background *) node)->rightUrl;
    1734          79 :                 return GF_OK;
    1735             :         case 8:
    1736          79 :                 info->name = "topUrl";
    1737          79 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1738          79 :                 info->fieldType = GF_SG_VRML_MFURL;
    1739          79 :                 info->far_ptr = & ((M_Background *) node)->topUrl;
    1740          79 :                 return GF_OK;
    1741             :         case 9:
    1742          94 :                 info->name = "skyAngle";
    1743          94 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1744          94 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    1745          94 :                 info->far_ptr = & ((M_Background *) node)->skyAngle;
    1746          94 :                 return GF_OK;
    1747             :         case 10:
    1748          94 :                 info->name = "skyColor";
    1749          94 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1750          94 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
    1751          94 :                 info->far_ptr = & ((M_Background *) node)->skyColor;
    1752          94 :                 return GF_OK;
    1753             :         case 11:
    1754          26 :                 info->name = "isBound";
    1755          26 :                 info->eventType = GF_SG_EVENT_OUT;
    1756          26 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    1757          26 :                 info->far_ptr = & ((M_Background *) node)->isBound;
    1758          26 :                 return GF_OK;
    1759             :         default:
    1760           0 :                 return GF_BAD_PARAM;
    1761             :         }
    1762         935 : }
    1763             : 
    1764             : 
    1765             : static s32 Background_get_field_index_by_name(char *name)
    1766             : {
    1767         132 :         if (!strcmp("set_bind", name)) return 0;
    1768          68 :         if (!strcmp("groundAngle", name)) return 1;
    1769          60 :         if (!strcmp("groundColor", name)) return 2;
    1770          48 :         if (!strcmp("backUrl", name)) return 3;
    1771          44 :         if (!strcmp("bottomUrl", name)) return 4;
    1772          44 :         if (!strcmp("frontUrl", name)) return 5;
    1773          32 :         if (!strcmp("leftUrl", name)) return 6;
    1774          28 :         if (!strcmp("rightUrl", name)) return 7;
    1775          24 :         if (!strcmp("topUrl", name)) return 8;
    1776          24 :         if (!strcmp("skyAngle", name)) return 9;
    1777          16 :         if (!strcmp("skyColor", name)) return 10;
    1778           0 :         if (!strcmp("isBound", name)) return 11;
    1779           0 :         return -1;
    1780          64 : }
    1781             : static Bool Background_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1782             : {
    1783           0 :         switch (FieldIndex) {
    1784             :         case 1:
    1785           0 :                 *AType = 8;
    1786           0 :                 *QType = 6;
    1787           0 :                 *b_min = FLT2FIX(0);
    1788           0 :                 *b_max = FLT2FIX(1.5707963);
    1789           0 :                 return 1;
    1790             :         case 2:
    1791           0 :                 *AType = 4;
    1792           0 :                 *QType = 4;
    1793           0 :                 *b_min = FLT2FIX(0);
    1794           0 :                 *b_max = FLT2FIX(1);
    1795           0 :                 return 1;
    1796             :         case 9:
    1797           0 :                 *AType = 8;
    1798           0 :                 *QType = 6;
    1799           0 :                 *b_min = FLT2FIX(0);
    1800           0 :                 *b_max = FLT2FIX(3.14159265);
    1801           0 :                 return 1;
    1802             :         case 10:
    1803           0 :                 *AType = 4;
    1804           0 :                 *QType = 4;
    1805           0 :                 *b_min = FLT2FIX(0);
    1806           0 :                 *b_max = FLT2FIX(1);
    1807           0 :                 return 1;
    1808             :         default:
    1809           0 :                 return 0;
    1810             :         }
    1811           0 : }
    1812             : 
    1813             : 
    1814             : 
    1815             : GF_Node *Background_Create()
    1816             : {
    1817             :         M_Background *p;
    1818         183 :         GF_SAFEALLOC(p, M_Background);
    1819          61 :         if(!p) return NULL;
    1820          61 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Background);
    1821             : 
    1822             :         /*default field values*/
    1823          61 :         p->skyColor.vals = (SFColor*)gf_malloc(sizeof(SFColor)*1);
    1824          61 :         p->skyColor.count = 1;
    1825          61 :         p->skyColor.vals[0].red = FLT2FIX(0);
    1826          61 :         p->skyColor.vals[0].green = FLT2FIX(0);
    1827          61 :         p->skyColor.vals[0].blue = FLT2FIX(0);
    1828          61 :         return (GF_Node *)p;
    1829          61 : }
    1830             : 
    1831             : 
    1832             : /*
    1833             :         Background2D Node deletion
    1834             : */
    1835             : 
    1836             : static void Background2D_Del(GF_Node *node)
    1837             : {
    1838       10464 :         M_Background2D *p = (M_Background2D *) node;
    1839        5232 :         gf_sg_mfurl_del(p->url);
    1840        5232 :         gf_node_free((GF_Node *) p);
    1841        5232 : }
    1842             : 
    1843             : static const u16 Background2D_Def2All[] = { 1, 2};
    1844             : static const u16 Background2D_In2All[] = { 0, 1, 2};
    1845             : static const u16 Background2D_Out2All[] = { 1, 2, 3};
    1846             : static const u16 Background2D_Dyn2All[] = { 1};
    1847             : 
    1848             : static u32 Background2D_get_field_count(GF_Node *node, u8 IndexMode)
    1849             : {
    1850        9664 :         switch(IndexMode) {
    1851             :         case GF_SG_FIELD_CODING_IN:
    1852         173 :                 return 3;
    1853             :         case GF_SG_FIELD_CODING_DEF:
    1854        2587 :                 return 2;
    1855             :         case GF_SG_FIELD_CODING_OUT:
    1856           0 :                 return 3;
    1857             :         case GF_SG_FIELD_CODING_DYN:
    1858           0 :                 return 1;
    1859             :         default:
    1860        2072 :                 return 4;
    1861             :         }
    1862        4832 : }
    1863             : 
    1864             : static GF_Err Background2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1865             : {
    1866        5512 :         switch(IndexMode) {
    1867             :         case GF_SG_FIELD_CODING_IN:
    1868         159 :                 *allField = Background2D_In2All[inField];
    1869         159 :                 return GF_OK;
    1870             :         case GF_SG_FIELD_CODING_DEF:
    1871        2597 :                 *allField = Background2D_Def2All[inField];
    1872        2597 :                 return GF_OK;
    1873             :         case GF_SG_FIELD_CODING_OUT:
    1874           0 :                 *allField = Background2D_Out2All[inField];
    1875           0 :                 return GF_OK;
    1876             :         case GF_SG_FIELD_CODING_DYN:
    1877           0 :                 *allField = Background2D_Dyn2All[inField];
    1878           0 :                 return GF_OK;
    1879             :         default:
    1880           0 :                 return GF_BAD_PARAM;
    1881             :         }
    1882        2756 : }
    1883             : static GF_Err Background2D_get_field(GF_Node *node, GF_FieldInfo *info)
    1884             : {
    1885       38716 :         switch (info->fieldIndex) {
    1886             :         case 0:
    1887        2222 :                 info->name = "set_bind";
    1888        2222 :                 info->eventType = GF_SG_EVENT_IN;
    1889        2222 :                 info->on_event_in = ((M_Background2D *)node)->on_set_bind;
    1890        2222 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    1891        2222 :                 info->far_ptr = & ((M_Background2D *) node)->set_bind;
    1892        2222 :                 return GF_OK;
    1893             :         case 1:
    1894        9491 :                 info->name = "backColor";
    1895        9491 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1896        9491 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    1897        9491 :                 info->far_ptr = & ((M_Background2D *) node)->backColor;
    1898        9491 :                 return GF_OK;
    1899             :         case 2:
    1900        5573 :                 info->name = "url";
    1901        5573 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1902        5573 :                 info->fieldType = GF_SG_VRML_MFURL;
    1903        5573 :                 info->far_ptr = & ((M_Background2D *) node)->url;
    1904        5573 :                 return GF_OK;
    1905             :         case 3:
    1906        2072 :                 info->name = "isBound";
    1907        2072 :                 info->eventType = GF_SG_EVENT_OUT;
    1908        2072 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    1909        2072 :                 info->far_ptr = & ((M_Background2D *) node)->isBound;
    1910        2072 :                 return GF_OK;
    1911             :         default:
    1912           0 :                 return GF_BAD_PARAM;
    1913             :         }
    1914       19358 : }
    1915             : 
    1916             : 
    1917             : static s32 Background2D_get_field_index_by_name(char *name)
    1918             : {
    1919        2526 :         if (!strcmp("set_bind", name)) return 0;
    1920        2326 :         if (!strcmp("backColor", name)) return 1;
    1921         136 :         if (!strcmp("url", name)) return 2;
    1922           0 :         if (!strcmp("isBound", name)) return 3;
    1923           0 :         return -1;
    1924        1241 : }
    1925             : static Bool Background2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1926             : {
    1927           0 :         switch (FieldIndex) {
    1928             :         case 1:
    1929           0 :                 *AType = 4;
    1930           0 :                 *QType = 4;
    1931           0 :                 *b_min = FLT2FIX(0);
    1932           0 :                 *b_max = FLT2FIX(1);
    1933           0 :                 return 1;
    1934             :         default:
    1935           0 :                 return 0;
    1936             :         }
    1937           0 : }
    1938             : 
    1939             : 
    1940             : 
    1941             : GF_Node *Background2D_Create()
    1942             : {
    1943             :         M_Background2D *p;
    1944       15696 :         GF_SAFEALLOC(p, M_Background2D);
    1945        5232 :         if(!p) return NULL;
    1946        5232 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Background2D);
    1947             : 
    1948             :         /*default field values*/
    1949        5232 :         p->backColor.red = FLT2FIX(0);
    1950        5232 :         p->backColor.green = FLT2FIX(0);
    1951        5232 :         p->backColor.blue = FLT2FIX(0);
    1952        5232 :         return (GF_Node *)p;
    1953        5232 : }
    1954             : 
    1955             : 
    1956             : /*
    1957             :         Billboard Node deletion
    1958             : */
    1959             : 
    1960             : static void Billboard_Del(GF_Node *node)
    1961             : {
    1962         108 :         M_Billboard *p = (M_Billboard *) node;
    1963          54 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    1964          54 :         gf_node_free((GF_Node *) p);
    1965          54 : }
    1966             : 
    1967             : static const u16 Billboard_Def2All[] = { 2, 3};
    1968             : static const u16 Billboard_In2All[] = { 0, 1, 2, 3};
    1969             : static const u16 Billboard_Out2All[] = { 2, 3};
    1970             : static const u16 Billboard_Dyn2All[] = { 3};
    1971             : 
    1972             : static u32 Billboard_get_field_count(GF_Node *node, u8 IndexMode)
    1973             : {
    1974          96 :         switch(IndexMode) {
    1975             :         case GF_SG_FIELD_CODING_IN:
    1976           0 :                 return 4;
    1977             :         case GF_SG_FIELD_CODING_DEF:
    1978          27 :                 return 2;
    1979             :         case GF_SG_FIELD_CODING_OUT:
    1980           0 :                 return 2;
    1981             :         case GF_SG_FIELD_CODING_DYN:
    1982           0 :                 return 1;
    1983             :         default:
    1984          21 :                 return 4;
    1985             :         }
    1986          48 : }
    1987             : 
    1988             : static GF_Err Billboard_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1989             : {
    1990          74 :         switch(IndexMode) {
    1991             :         case GF_SG_FIELD_CODING_IN:
    1992           0 :                 *allField = Billboard_In2All[inField];
    1993           0 :                 return GF_OK;
    1994             :         case GF_SG_FIELD_CODING_DEF:
    1995          37 :                 *allField = Billboard_Def2All[inField];
    1996          37 :                 return GF_OK;
    1997             :         case GF_SG_FIELD_CODING_OUT:
    1998           0 :                 *allField = Billboard_Out2All[inField];
    1999           0 :                 return GF_OK;
    2000             :         case GF_SG_FIELD_CODING_DYN:
    2001           0 :                 *allField = Billboard_Dyn2All[inField];
    2002           0 :                 return GF_OK;
    2003             :         default:
    2004           0 :                 return GF_BAD_PARAM;
    2005             :         }
    2006          37 : }
    2007             : static GF_Err Billboard_get_field(GF_Node *node, GF_FieldInfo *info)
    2008             : {
    2009         400 :         switch (info->fieldIndex) {
    2010             :         case 0:
    2011          21 :                 info->name = "addChildren";
    2012          21 :                 info->eventType = GF_SG_EVENT_IN;
    2013          21 :                 info->on_event_in = ((M_Billboard *)node)->on_addChildren;
    2014          21 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2015          21 :                 info->NDTtype = NDT_SF3DNode;
    2016          21 :                 info->far_ptr = & ((M_Billboard *)node)->addChildren;
    2017          21 :                 return GF_OK;
    2018             :         case 1:
    2019          21 :                 info->name = "removeChildren";
    2020          21 :                 info->eventType = GF_SG_EVENT_IN;
    2021          21 :                 info->on_event_in = ((M_Billboard *)node)->on_removeChildren;
    2022          21 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2023          21 :                 info->NDTtype = NDT_SF3DNode;
    2024          21 :                 info->far_ptr = & ((M_Billboard *)node)->removeChildren;
    2025          21 :                 return GF_OK;
    2026             :         case 2:
    2027          72 :                 info->name = "children";
    2028          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2029          72 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2030          72 :                 info->NDTtype = NDT_SF3DNode;
    2031          72 :                 info->far_ptr = & ((M_Billboard *)node)->children;
    2032          72 :                 return GF_OK;
    2033             :         case 3:
    2034          86 :                 info->name = "axisOfRotation";
    2035          86 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2036          86 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    2037          86 :                 info->far_ptr = & ((M_Billboard *) node)->axisOfRotation;
    2038          86 :                 return GF_OK;
    2039             :         default:
    2040           0 :                 return GF_BAD_PARAM;
    2041             :         }
    2042         200 : }
    2043             : 
    2044             : 
    2045             : static s32 Billboard_get_field_index_by_name(char *name)
    2046             : {
    2047          44 :         if (!strcmp("addChildren", name)) return 0;
    2048          22 :         if (!strcmp("removeChildren", name)) return 1;
    2049          34 :         if (!strcmp("children", name)) return 2;
    2050          20 :         if (!strcmp("axisOfRotation", name)) return 3;
    2051           0 :         return -1;
    2052          22 : }
    2053             : static Bool Billboard_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2054             : {
    2055           0 :         switch (FieldIndex) {
    2056             :         case 3:
    2057           0 :                 *AType = 9;
    2058           0 :                 *QType = 9;
    2059           0 :                 return 1;
    2060             :         default:
    2061           0 :                 return 0;
    2062             :         }
    2063           0 : }
    2064             : 
    2065             : 
    2066             : 
    2067             : GF_Node *Billboard_Create()
    2068             : {
    2069             :         M_Billboard *p;
    2070         162 :         GF_SAFEALLOC(p, M_Billboard);
    2071          54 :         if(!p) return NULL;
    2072          54 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Billboard);
    2073          54 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    2074             : 
    2075             :         /*default field values*/
    2076          54 :         p->axisOfRotation.x = FLT2FIX(0);
    2077          54 :         p->axisOfRotation.y = FLT2FIX(1);
    2078          54 :         p->axisOfRotation.z = FLT2FIX(0);
    2079          54 :         return (GF_Node *)p;
    2080          54 : }
    2081             : 
    2082             : 
    2083             : /*
    2084             :         Bitmap Node deletion
    2085             : */
    2086             : 
    2087             : static void Bitmap_Del(GF_Node *node)
    2088             : {
    2089        1156 :         M_Bitmap *p = (M_Bitmap *) node;
    2090         578 :         gf_node_free((GF_Node *) p);
    2091         578 : }
    2092             : 
    2093             : static const u16 Bitmap_Def2All[] = { 0};
    2094             : static const u16 Bitmap_In2All[] = { 0};
    2095             : static const u16 Bitmap_Out2All[] = { 0};
    2096             : static const u16 Bitmap_Dyn2All[] = { 0};
    2097             : 
    2098             : static u32 Bitmap_get_field_count(GF_Node *node, u8 IndexMode)
    2099             : {
    2100        1082 :         switch(IndexMode) {
    2101             :         case GF_SG_FIELD_CODING_IN:
    2102          18 :                 return 1;
    2103             :         case GF_SG_FIELD_CODING_DEF:
    2104         264 :                 return 1;
    2105             :         case GF_SG_FIELD_CODING_OUT:
    2106           0 :                 return 1;
    2107             :         case GF_SG_FIELD_CODING_DYN:
    2108           0 :                 return 1;
    2109             :         default:
    2110         259 :                 return 1;
    2111             :         }
    2112         541 : }
    2113             : 
    2114             : static GF_Err Bitmap_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2115             : {
    2116         224 :         switch(IndexMode) {
    2117             :         case GF_SG_FIELD_CODING_IN:
    2118          14 :                 *allField = Bitmap_In2All[inField];
    2119          14 :                 return GF_OK;
    2120             :         case GF_SG_FIELD_CODING_DEF:
    2121          98 :                 *allField = Bitmap_Def2All[inField];
    2122          98 :                 return GF_OK;
    2123             :         case GF_SG_FIELD_CODING_OUT:
    2124           0 :                 *allField = Bitmap_Out2All[inField];
    2125           0 :                 return GF_OK;
    2126             :         case GF_SG_FIELD_CODING_DYN:
    2127           0 :                 *allField = Bitmap_Dyn2All[inField];
    2128           0 :                 return GF_OK;
    2129             :         default:
    2130           0 :                 return GF_BAD_PARAM;
    2131             :         }
    2132         112 : }
    2133             : static GF_Err Bitmap_get_field(GF_Node *node, GF_FieldInfo *info)
    2134             : {
    2135        1508 :         switch (info->fieldIndex) {
    2136             :         case 0:
    2137         754 :                 info->name = "scale";
    2138         754 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2139         754 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    2140         754 :                 info->far_ptr = & ((M_Bitmap *) node)->scale;
    2141         754 :                 return GF_OK;
    2142             :         default:
    2143           0 :                 return GF_BAD_PARAM;
    2144             :         }
    2145         754 : }
    2146             : 
    2147             : 
    2148             : static s32 Bitmap_get_field_index_by_name(char *name)
    2149             : {
    2150         120 :         if (!strcmp("scale", name)) return 0;
    2151           0 :         return -1;
    2152          40 : }
    2153             : static Bool Bitmap_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2154             : {
    2155           0 :         switch (FieldIndex) {
    2156             :         case 0:
    2157           0 :                 *AType = 12;
    2158           0 :                 *QType = 12;
    2159           0 :                 *b_min = FLT2FIX(-1);
    2160           0 :                 *b_max = FIX_MAX;
    2161           0 :                 return 1;
    2162             :         default:
    2163           0 :                 return 0;
    2164             :         }
    2165           0 : }
    2166             : 
    2167             : 
    2168             : 
    2169             : GF_Node *Bitmap_Create()
    2170             : {
    2171             :         M_Bitmap *p;
    2172        1734 :         GF_SAFEALLOC(p, M_Bitmap);
    2173         578 :         if(!p) return NULL;
    2174         578 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Bitmap);
    2175             : 
    2176             :         /*default field values*/
    2177         578 :         p->scale.x = FLT2FIX(-1);
    2178         578 :         p->scale.y = FLT2FIX(-1);
    2179         578 :         return (GF_Node *)p;
    2180         578 : }
    2181             : 
    2182             : 
    2183             : /*
    2184             :         Box Node deletion
    2185             : */
    2186             : 
    2187             : static void Box_Del(GF_Node *node)
    2188             : {
    2189        1856 :         M_Box *p = (M_Box *) node;
    2190         928 :         gf_node_free((GF_Node *) p);
    2191         928 : }
    2192             : 
    2193             : static const u16 Box_Def2All[] = { 0};
    2194             : 
    2195             : static u32 Box_get_field_count(GF_Node *node, u8 IndexMode)
    2196             : {
    2197        1684 :         switch(IndexMode) {
    2198             :         case GF_SG_FIELD_CODING_IN:
    2199           0 :                 return 0;
    2200             :         case GF_SG_FIELD_CODING_DEF:
    2201         387 :                 return 1;
    2202             :         case GF_SG_FIELD_CODING_OUT:
    2203           0 :                 return 0;
    2204             :         case GF_SG_FIELD_CODING_DYN:
    2205           0 :                 return 0;
    2206             :         default:
    2207         455 :                 return 1;
    2208             :         }
    2209         842 : }
    2210             : 
    2211             : static GF_Err Box_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2212             : {
    2213         532 :         switch(IndexMode) {
    2214             :         case GF_SG_FIELD_CODING_DEF:
    2215         266 :                 *allField = Box_Def2All[inField];
    2216         266 :                 return GF_OK;
    2217             :         default:
    2218           0 :                 return GF_BAD_PARAM;
    2219             :         }
    2220         266 : }
    2221             : static GF_Err Box_get_field(GF_Node *node, GF_FieldInfo *info)
    2222             : {
    2223        3264 :         switch (info->fieldIndex) {
    2224             :         case 0:
    2225        1632 :                 info->name = "size";
    2226        1632 :                 info->eventType = GF_SG_EVENT_FIELD;
    2227        1632 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    2228        1632 :                 info->far_ptr = & ((M_Box *) node)->size;
    2229        1632 :                 return GF_OK;
    2230             :         default:
    2231           0 :                 return GF_BAD_PARAM;
    2232             :         }
    2233        1632 : }
    2234             : 
    2235             : 
    2236             : static s32 Box_get_field_index_by_name(char *name)
    2237             : {
    2238         462 :         if (!strcmp("size", name)) return 0;
    2239           0 :         return -1;
    2240         154 : }
    2241             : static Bool Box_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2242             : {
    2243           0 :         switch (FieldIndex) {
    2244             :         case 0:
    2245           0 :                 *AType = 0;
    2246           0 :                 *QType = 11;
    2247           0 :                 *b_min = FLT2FIX(0);
    2248           0 :                 *b_max = FIX_MAX;
    2249           0 :                 return 1;
    2250             :         default:
    2251           0 :                 return 0;
    2252             :         }
    2253           0 : }
    2254             : 
    2255             : 
    2256             : 
    2257             : GF_Node *Box_Create()
    2258             : {
    2259             :         M_Box *p;
    2260        2784 :         GF_SAFEALLOC(p, M_Box);
    2261         928 :         if(!p) return NULL;
    2262         928 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Box);
    2263             : 
    2264             :         /*default field values*/
    2265         928 :         p->size.x = FLT2FIX(2);
    2266         928 :         p->size.y = FLT2FIX(2);
    2267         928 :         p->size.z = FLT2FIX(2);
    2268         928 :         return (GF_Node *)p;
    2269         928 : }
    2270             : 
    2271             : 
    2272             : /*
    2273             :         Circle Node deletion
    2274             : */
    2275             : 
    2276             : static void Circle_Del(GF_Node *node)
    2277             : {
    2278        5928 :         M_Circle *p = (M_Circle *) node;
    2279        2964 :         gf_node_free((GF_Node *) p);
    2280        2964 : }
    2281             : 
    2282             : static const u16 Circle_Def2All[] = { 0};
    2283             : static const u16 Circle_In2All[] = { 0};
    2284             : static const u16 Circle_Out2All[] = { 0};
    2285             : static const u16 Circle_Dyn2All[] = { 0};
    2286             : 
    2287             : static u32 Circle_get_field_count(GF_Node *node, u8 IndexMode)
    2288             : {
    2289        5532 :         switch(IndexMode) {
    2290             :         case GF_SG_FIELD_CODING_IN:
    2291          18 :                 return 1;
    2292             :         case GF_SG_FIELD_CODING_DEF:
    2293         937 :                 return 1;
    2294             :         case GF_SG_FIELD_CODING_OUT:
    2295           0 :                 return 1;
    2296             :         case GF_SG_FIELD_CODING_DYN:
    2297           0 :                 return 1;
    2298             :         default:
    2299        1811 :                 return 1;
    2300             :         }
    2301        2766 : }
    2302             : 
    2303             : static GF_Err Circle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2304             : {
    2305        1452 :         switch(IndexMode) {
    2306             :         case GF_SG_FIELD_CODING_IN:
    2307          14 :                 *allField = Circle_In2All[inField];
    2308          14 :                 return GF_OK;
    2309             :         case GF_SG_FIELD_CODING_DEF:
    2310         712 :                 *allField = Circle_Def2All[inField];
    2311         712 :                 return GF_OK;
    2312             :         case GF_SG_FIELD_CODING_OUT:
    2313           0 :                 *allField = Circle_Out2All[inField];
    2314           0 :                 return GF_OK;
    2315             :         case GF_SG_FIELD_CODING_DYN:
    2316           0 :                 *allField = Circle_Dyn2All[inField];
    2317           0 :                 return GF_OK;
    2318             :         default:
    2319           0 :                 return GF_BAD_PARAM;
    2320             :         }
    2321         726 : }
    2322             : static GF_Err Circle_get_field(GF_Node *node, GF_FieldInfo *info)
    2323             : {
    2324       11184 :         switch (info->fieldIndex) {
    2325             :         case 0:
    2326        5592 :                 info->name = "radius";
    2327        5592 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2328        5592 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    2329        5592 :                 info->far_ptr = & ((M_Circle *) node)->radius;
    2330        5592 :                 return GF_OK;
    2331             :         default:
    2332           0 :                 return GF_BAD_PARAM;
    2333             :         }
    2334        5592 : }
    2335             : 
    2336             : 
    2337             : static s32 Circle_get_field_index_by_name(char *name)
    2338             : {
    2339        1326 :         if (!strcmp("radius", name)) return 0;
    2340           0 :         return -1;
    2341         442 : }
    2342             : static Bool Circle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2343             : {
    2344           0 :         switch (FieldIndex) {
    2345             :         case 0:
    2346           0 :                 *AType = 7;
    2347           0 :                 *QType = 12;
    2348           0 :                 *b_min = FLT2FIX(0);
    2349           0 :                 *b_max = FIX_MAX;
    2350           0 :                 return 1;
    2351             :         default:
    2352           0 :                 return 0;
    2353             :         }
    2354           0 : }
    2355             : 
    2356             : 
    2357             : 
    2358             : GF_Node *Circle_Create()
    2359             : {
    2360             :         M_Circle *p;
    2361        8892 :         GF_SAFEALLOC(p, M_Circle);
    2362        2964 :         if(!p) return NULL;
    2363        2964 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Circle);
    2364             : 
    2365             :         /*default field values*/
    2366        2964 :         p->radius = FLT2FIX(1);
    2367        2964 :         return (GF_Node *)p;
    2368        2964 : }
    2369             : 
    2370             : 
    2371             : /*
    2372             :         Collision Node deletion
    2373             : */
    2374             : 
    2375             : static void Collision_Del(GF_Node *node)
    2376             : {
    2377          72 :         M_Collision *p = (M_Collision *) node;
    2378          36 :         gf_node_unregister((GF_Node *) p->proxy, (GF_Node *) p);
    2379          36 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    2380          36 :         gf_node_free((GF_Node *) p);
    2381          36 : }
    2382             : 
    2383             : static const u16 Collision_Def2All[] = { 2, 3, 4};
    2384             : static const u16 Collision_In2All[] = { 0, 1, 2, 3};
    2385             : static const u16 Collision_Out2All[] = { 2, 3, 5};
    2386             : 
    2387             : static u32 Collision_get_field_count(GF_Node *node, u8 IndexMode)
    2388             : {
    2389         100 :         switch(IndexMode) {
    2390             :         case GF_SG_FIELD_CODING_IN:
    2391           0 :                 return 4;
    2392             :         case GF_SG_FIELD_CODING_DEF:
    2393          18 :                 return 3;
    2394             :         case GF_SG_FIELD_CODING_OUT:
    2395          18 :                 return 3;
    2396             :         case GF_SG_FIELD_CODING_DYN:
    2397           0 :                 return 0;
    2398             :         default:
    2399          14 :                 return 6;
    2400             :         }
    2401          50 : }
    2402             : 
    2403             : static GF_Err Collision_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2404             : {
    2405          98 :         switch(IndexMode) {
    2406             :         case GF_SG_FIELD_CODING_IN:
    2407           0 :                 *allField = Collision_In2All[inField];
    2408           0 :                 return GF_OK;
    2409             :         case GF_SG_FIELD_CODING_DEF:
    2410          27 :                 *allField = Collision_Def2All[inField];
    2411          27 :                 return GF_OK;
    2412             :         case GF_SG_FIELD_CODING_OUT:
    2413          22 :                 *allField = Collision_Out2All[inField];
    2414          22 :                 return GF_OK;
    2415             :         default:
    2416           0 :                 return GF_BAD_PARAM;
    2417             :         }
    2418          49 : }
    2419             : static GF_Err Collision_get_field(GF_Node *node, GF_FieldInfo *info)
    2420             : {
    2421         350 :         switch (info->fieldIndex) {
    2422             :         case 0:
    2423          14 :                 info->name = "addChildren";
    2424          14 :                 info->eventType = GF_SG_EVENT_IN;
    2425          14 :                 info->on_event_in = ((M_Collision *)node)->on_addChildren;
    2426          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2427          14 :                 info->NDTtype = NDT_SF3DNode;
    2428          14 :                 info->far_ptr = & ((M_Collision *)node)->addChildren;
    2429          14 :                 return GF_OK;
    2430             :         case 1:
    2431          14 :                 info->name = "removeChildren";
    2432          14 :                 info->eventType = GF_SG_EVENT_IN;
    2433          14 :                 info->on_event_in = ((M_Collision *)node)->on_removeChildren;
    2434          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2435          14 :                 info->NDTtype = NDT_SF3DNode;
    2436          14 :                 info->far_ptr = & ((M_Collision *)node)->removeChildren;
    2437          14 :                 return GF_OK;
    2438             :         case 2:
    2439          48 :                 info->name = "children";
    2440          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2441          48 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2442          48 :                 info->NDTtype = NDT_SF3DNode;
    2443          48 :                 info->far_ptr = & ((M_Collision *)node)->children;
    2444          48 :                 return GF_OK;
    2445             :         case 3:
    2446          36 :                 info->name = "collide";
    2447          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2448          36 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    2449          36 :                 info->far_ptr = & ((M_Collision *) node)->collide;
    2450          36 :                 return GF_OK;
    2451             :         case 4:
    2452          33 :                 info->name = "proxy";
    2453          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    2454          33 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2455          33 :                 info->NDTtype = NDT_SF3DNode;
    2456          33 :                 info->far_ptr = & ((M_Collision *)node)->proxy;
    2457          33 :                 return GF_OK;
    2458             :         case 5:
    2459          30 :                 info->name = "collideTime";
    2460          30 :                 info->eventType = GF_SG_EVENT_OUT;
    2461          30 :                 info->fieldType = GF_SG_VRML_SFTIME;
    2462          30 :                 info->far_ptr = & ((M_Collision *) node)->collideTime;
    2463          30 :                 return GF_OK;
    2464             :         default:
    2465           0 :                 return GF_BAD_PARAM;
    2466             :         }
    2467         175 : }
    2468             : 
    2469             : 
    2470             : static s32 Collision_get_field_index_by_name(char *name)
    2471             : {
    2472          40 :         if (!strcmp("addChildren", name)) return 0;
    2473          20 :         if (!strcmp("removeChildren", name)) return 1;
    2474          28 :         if (!strcmp("children", name)) return 2;
    2475          12 :         if (!strcmp("collide", name)) return 3;
    2476          16 :         if (!strcmp("proxy", name)) return 4;
    2477          16 :         if (!strcmp("collideTime", name)) return 5;
    2478           0 :         return -1;
    2479          20 : }
    2480             : static Bool Collision_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2481             : {
    2482             :         switch (FieldIndex) {
    2483             :         default:
    2484           0 :                 return 0;
    2485             :         }
    2486             : }
    2487             : 
    2488             : 
    2489             : 
    2490             : GF_Node *Collision_Create()
    2491             : {
    2492             :         M_Collision *p;
    2493         108 :         GF_SAFEALLOC(p, M_Collision);
    2494          36 :         if(!p) return NULL;
    2495          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Collision);
    2496          36 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    2497             : 
    2498             :         /*default field values*/
    2499          36 :         p->collide = 1;
    2500          36 :         return (GF_Node *)p;
    2501          36 : }
    2502             : 
    2503             : 
    2504             : /*
    2505             :         Color Node deletion
    2506             : */
    2507             : 
    2508             : static void Color_Del(GF_Node *node)
    2509             : {
    2510         304 :         M_Color *p = (M_Color *) node;
    2511         152 :         gf_sg_mfcolor_del(p->color);
    2512         152 :         gf_node_free((GF_Node *) p);
    2513         152 : }
    2514             : 
    2515             : static const u16 Color_Def2All[] = { 0};
    2516             : static const u16 Color_In2All[] = { 0};
    2517             : static const u16 Color_Out2All[] = { 0};
    2518             : static const u16 Color_Dyn2All[] = { 0};
    2519             : 
    2520             : static u32 Color_get_field_count(GF_Node *node, u8 IndexMode)
    2521             : {
    2522         268 :         switch(IndexMode) {
    2523             :         case GF_SG_FIELD_CODING_IN:
    2524           0 :                 return 1;
    2525             :         case GF_SG_FIELD_CODING_DEF:
    2526          72 :                 return 1;
    2527             :         case GF_SG_FIELD_CODING_OUT:
    2528           0 :                 return 1;
    2529             :         case GF_SG_FIELD_CODING_DYN:
    2530           0 :                 return 1;
    2531             :         default:
    2532          62 :                 return 1;
    2533             :         }
    2534         134 : }
    2535             : 
    2536             : static GF_Err Color_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2537             : {
    2538         112 :         switch(IndexMode) {
    2539             :         case GF_SG_FIELD_CODING_IN:
    2540           0 :                 *allField = Color_In2All[inField];
    2541           0 :                 return GF_OK;
    2542             :         case GF_SG_FIELD_CODING_DEF:
    2543          56 :                 *allField = Color_Def2All[inField];
    2544          56 :                 return GF_OK;
    2545             :         case GF_SG_FIELD_CODING_OUT:
    2546           0 :                 *allField = Color_Out2All[inField];
    2547           0 :                 return GF_OK;
    2548             :         case GF_SG_FIELD_CODING_DYN:
    2549           0 :                 *allField = Color_Dyn2All[inField];
    2550           0 :                 return GF_OK;
    2551             :         default:
    2552           0 :                 return GF_BAD_PARAM;
    2553             :         }
    2554          56 : }
    2555             : static GF_Err Color_get_field(GF_Node *node, GF_FieldInfo *info)
    2556             : {
    2557         552 :         switch (info->fieldIndex) {
    2558             :         case 0:
    2559         276 :                 info->name = "color";
    2560         276 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2561         276 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
    2562         276 :                 info->far_ptr = & ((M_Color *) node)->color;
    2563         276 :                 return GF_OK;
    2564             :         default:
    2565           0 :                 return GF_BAD_PARAM;
    2566             :         }
    2567         276 : }
    2568             : 
    2569             : 
    2570             : static s32 Color_get_field_index_by_name(char *name)
    2571             : {
    2572          96 :         if (!strcmp("color", name)) return 0;
    2573           0 :         return -1;
    2574          32 : }
    2575             : static Bool Color_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2576             : {
    2577           0 :         switch (FieldIndex) {
    2578             :         case 0:
    2579           0 :                 *AType = 4;
    2580           0 :                 *QType = 4;
    2581           0 :                 *b_min = FLT2FIX(0);
    2582           0 :                 *b_max = FLT2FIX(1);
    2583           0 :                 return 1;
    2584             :         default:
    2585           0 :                 return 0;
    2586             :         }
    2587           0 : }
    2588             : 
    2589             : 
    2590             : 
    2591             : GF_Node *Color_Create()
    2592             : {
    2593             :         M_Color *p;
    2594         456 :         GF_SAFEALLOC(p, M_Color);
    2595         152 :         if(!p) return NULL;
    2596         152 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Color);
    2597             : 
    2598             :         /*default field values*/
    2599         152 :         return (GF_Node *)p;
    2600         152 : }
    2601             : 
    2602             : 
    2603             : /*
    2604             :         ColorInterpolator Node deletion
    2605             : */
    2606             : 
    2607             : static void ColorInterpolator_Del(GF_Node *node)
    2608             : {
    2609         216 :         M_ColorInterpolator *p = (M_ColorInterpolator *) node;
    2610         108 :         gf_sg_mffloat_del(p->key);
    2611         108 :         gf_sg_mfcolor_del(p->keyValue);
    2612         108 :         gf_node_free((GF_Node *) p);
    2613         108 : }
    2614             : 
    2615             : static const u16 ColorInterpolator_Def2All[] = { 1, 2};
    2616             : static const u16 ColorInterpolator_In2All[] = { 0, 1, 2};
    2617             : static const u16 ColorInterpolator_Out2All[] = { 1, 2, 3};
    2618             : 
    2619             : static u32 ColorInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
    2620             : {
    2621         408 :         switch(IndexMode) {
    2622             :         case GF_SG_FIELD_CODING_IN:
    2623          54 :                 return 3;
    2624             :         case GF_SG_FIELD_CODING_DEF:
    2625          54 :                 return 2;
    2626             :         case GF_SG_FIELD_CODING_OUT:
    2627          54 :                 return 3;
    2628             :         case GF_SG_FIELD_CODING_DYN:
    2629           0 :                 return 0;
    2630             :         default:
    2631          42 :                 return 4;
    2632             :         }
    2633         204 : }
    2634             : 
    2635             : static GF_Err ColorInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2636             : {
    2637         384 :         switch(IndexMode) {
    2638             :         case GF_SG_FIELD_CODING_IN:
    2639          42 :                 *allField = ColorInterpolator_In2All[inField];
    2640          42 :                 return GF_OK;
    2641             :         case GF_SG_FIELD_CODING_DEF:
    2642          84 :                 *allField = ColorInterpolator_Def2All[inField];
    2643          84 :                 return GF_OK;
    2644             :         case GF_SG_FIELD_CODING_OUT:
    2645          66 :                 *allField = ColorInterpolator_Out2All[inField];
    2646          66 :                 return GF_OK;
    2647             :         default:
    2648           0 :                 return GF_BAD_PARAM;
    2649             :         }
    2650         192 : }
    2651             : static GF_Err ColorInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
    2652             : {
    2653        1152 :         switch (info->fieldIndex) {
    2654             :         case 0:
    2655          90 :                 info->name = "set_fraction";
    2656          90 :                 info->eventType = GF_SG_EVENT_IN;
    2657          90 :                 info->on_event_in = ((M_ColorInterpolator *)node)->on_set_fraction;
    2658          90 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    2659          90 :                 info->far_ptr = & ((M_ColorInterpolator *) node)->set_fraction;
    2660          90 :                 return GF_OK;
    2661             :         case 1:
    2662         198 :                 info->name = "key";
    2663         198 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2664         198 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    2665         198 :                 info->far_ptr = & ((M_ColorInterpolator *) node)->key;
    2666         198 :                 return GF_OK;
    2667             :         case 2:
    2668         198 :                 info->name = "keyValue";
    2669         198 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2670         198 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
    2671         198 :                 info->far_ptr = & ((M_ColorInterpolator *) node)->keyValue;
    2672         198 :                 return GF_OK;
    2673             :         case 3:
    2674          90 :                 info->name = "value_changed";
    2675          90 :                 info->eventType = GF_SG_EVENT_OUT;
    2676          90 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    2677          90 :                 info->far_ptr = & ((M_ColorInterpolator *) node)->value_changed;
    2678          90 :                 return GF_OK;
    2679             :         default:
    2680           0 :                 return GF_BAD_PARAM;
    2681             :         }
    2682         576 : }
    2683             : 
    2684             : 
    2685             : static s32 ColorInterpolator_get_field_index_by_name(char *name)
    2686             : {
    2687         216 :         if (!strcmp("set_fraction", name)) return 0;
    2688          96 :         if (!strcmp("key", name)) return 1;
    2689          72 :         if (!strcmp("keyValue", name)) return 2;
    2690          48 :         if (!strcmp("value_changed", name)) return 3;
    2691           0 :         return -1;
    2692          96 : }
    2693             : static Bool ColorInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2694             : {
    2695           0 :         switch (FieldIndex) {
    2696             :         case 1:
    2697           0 :                 *AType = 0;
    2698           0 :                 *QType = 8;
    2699           0 :                 *b_min = FLT2FIX(0);
    2700           0 :                 *b_max = FLT2FIX(1);
    2701           0 :                 return 1;
    2702             :         case 2:
    2703           0 :                 *AType = 0;
    2704           0 :                 *QType = 4;
    2705           0 :                 *b_min = FLT2FIX(0);
    2706           0 :                 *b_max = FLT2FIX(1);
    2707           0 :                 return 1;
    2708             :         default:
    2709           0 :                 return 0;
    2710             :         }
    2711           0 : }
    2712             : 
    2713             : 
    2714             : 
    2715             : GF_Node *ColorInterpolator_Create()
    2716             : {
    2717             :         M_ColorInterpolator *p;
    2718         324 :         GF_SAFEALLOC(p, M_ColorInterpolator);
    2719         108 :         if(!p) return NULL;
    2720         108 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ColorInterpolator);
    2721             : 
    2722             :         /*default field values*/
    2723         108 :         return (GF_Node *)p;
    2724         108 : }
    2725             : 
    2726             : 
    2727             : /*
    2728             :         CompositeTexture2D Node deletion
    2729             : */
    2730             : 
    2731             : static void CompositeTexture2D_Del(GF_Node *node)
    2732             : {
    2733         164 :         M_CompositeTexture2D *p = (M_CompositeTexture2D *) node;
    2734          82 :         gf_node_unregister((GF_Node *) p->background, (GF_Node *) p);
    2735          82 :         gf_node_unregister((GF_Node *) p->viewport, (GF_Node *) p);
    2736          82 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    2737          82 :         gf_node_free((GF_Node *) p);
    2738          82 : }
    2739             : 
    2740             : static const u16 CompositeTexture2D_Def2All[] = { 2, 3, 4, 5, 6, 7};
    2741             : static const u16 CompositeTexture2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
    2742             : static const u16 CompositeTexture2D_Out2All[] = { 2, 3, 4, 5, 6};
    2743             : 
    2744             : static u32 CompositeTexture2D_get_field_count(GF_Node *node, u8 IndexMode)
    2745             : {
    2746         134 :         switch(IndexMode) {
    2747             :         case GF_SG_FIELD_CODING_IN:
    2748           0 :                 return 7;
    2749             :         case GF_SG_FIELD_CODING_DEF:
    2750          36 :                 return 6;
    2751             :         case GF_SG_FIELD_CODING_OUT:
    2752           0 :                 return 5;
    2753             :         case GF_SG_FIELD_CODING_DYN:
    2754           0 :                 return 0;
    2755             :         default:
    2756          31 :                 return 8;
    2757             :         }
    2758          67 : }
    2759             : 
    2760             : static GF_Err CompositeTexture2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2761             : {
    2762         226 :         switch(IndexMode) {
    2763             :         case GF_SG_FIELD_CODING_IN:
    2764           0 :                 *allField = CompositeTexture2D_In2All[inField];
    2765           0 :                 return GF_OK;
    2766             :         case GF_SG_FIELD_CODING_DEF:
    2767         113 :                 *allField = CompositeTexture2D_Def2All[inField];
    2768         113 :                 return GF_OK;
    2769             :         case GF_SG_FIELD_CODING_OUT:
    2770           0 :                 *allField = CompositeTexture2D_Out2All[inField];
    2771           0 :                 return GF_OK;
    2772             :         default:
    2773           0 :                 return GF_BAD_PARAM;
    2774             :         }
    2775         113 : }
    2776             : static GF_Err CompositeTexture2D_get_field(GF_Node *node, GF_FieldInfo *info)
    2777             : {
    2778        1404 :         switch (info->fieldIndex) {
    2779             :         case 0:
    2780          31 :                 info->name = "addChildren";
    2781          31 :                 info->eventType = GF_SG_EVENT_IN;
    2782          31 :                 info->on_event_in = ((M_CompositeTexture2D *)node)->on_addChildren;
    2783          31 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2784          31 :                 info->NDTtype = NDT_SF2DNode;
    2785          31 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->addChildren;
    2786          31 :                 return GF_OK;
    2787             :         case 1:
    2788          31 :                 info->name = "removeChildren";
    2789          31 :                 info->eventType = GF_SG_EVENT_IN;
    2790          31 :                 info->on_event_in = ((M_CompositeTexture2D *)node)->on_removeChildren;
    2791          31 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2792          31 :                 info->NDTtype = NDT_SF2DNode;
    2793          31 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->removeChildren;
    2794          31 :                 return GF_OK;
    2795             :         case 2:
    2796         141 :                 info->name = "children";
    2797         141 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2798         141 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2799         141 :                 info->NDTtype = NDT_SF2DNode;
    2800         141 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->children;
    2801         141 :                 return GF_OK;
    2802             :         case 3:
    2803         164 :                 info->name = "pixelWidth";
    2804         164 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2805         164 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2806         164 :                 info->far_ptr = & ((M_CompositeTexture2D *) node)->pixelWidth;
    2807         164 :                 return GF_OK;
    2808             :         case 4:
    2809         164 :                 info->name = "pixelHeight";
    2810         164 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2811         164 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2812         164 :                 info->far_ptr = & ((M_CompositeTexture2D *) node)->pixelHeight;
    2813         164 :                 return GF_OK;
    2814             :         case 5:
    2815          54 :                 info->name = "background";
    2816          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2817          54 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2818          54 :                 info->NDTtype = NDT_SFBackground2DNode;
    2819          54 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->background;
    2820          54 :                 return GF_OK;
    2821             :         case 6:
    2822          39 :                 info->name = "viewport";
    2823          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2824          39 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2825          39 :                 info->NDTtype = NDT_SFViewportNode;
    2826          39 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->viewport;
    2827          39 :                 return GF_OK;
    2828             :         case 7:
    2829          78 :                 info->name = "repeatSandT";
    2830          78 :                 info->eventType = GF_SG_EVENT_FIELD;
    2831          78 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2832          78 :                 info->far_ptr = & ((M_CompositeTexture2D *) node)->repeatSandT;
    2833          78 :                 return GF_OK;
    2834             :         default:
    2835           0 :                 return GF_BAD_PARAM;
    2836             :         }
    2837         702 : }
    2838             : 
    2839             : 
    2840             : static s32 CompositeTexture2D_get_field_index_by_name(char *name)
    2841             : {
    2842         282 :         if (!strcmp("addChildren", name)) return 0;
    2843         141 :         if (!strcmp("removeChildren", name)) return 1;
    2844         194 :         if (!strcmp("children", name)) return 2;
    2845         130 :         if (!strcmp("pixelWidth", name)) return 3;
    2846          88 :         if (!strcmp("pixelHeight", name)) return 4;
    2847           8 :         if (!strcmp("background", name)) return 5;
    2848           0 :         if (!strcmp("viewport", name)) return 6;
    2849           0 :         if (!strcmp("repeatSandT", name)) return 7;
    2850           0 :         return -1;
    2851         141 : }
    2852             : static Bool CompositeTexture2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2853             : {
    2854           0 :         switch (FieldIndex) {
    2855             :         case 3:
    2856           0 :                 *AType = 0;
    2857           0 :                 *QType = 13;
    2858           0 :                 *QT13_bits = 16;
    2859           0 :                 *b_min = FLT2FIX(0);
    2860           0 :                 *b_max = FIX_MAX;
    2861           0 :                 return 1;
    2862             :         case 4:
    2863           0 :                 *AType = 0;
    2864           0 :                 *QType = 13;
    2865           0 :                 *QT13_bits = 16;
    2866           0 :                 *b_min = FLT2FIX(0);
    2867           0 :                 *b_max = FIX_MAX;
    2868           0 :                 return 1;
    2869             :         case 7:
    2870           0 :                 *AType = 0;
    2871           0 :                 *QType = 13;
    2872           0 :                 *QT13_bits = 2;
    2873           0 :                 *b_min = FLT2FIX(0);
    2874           0 :                 *b_max = FLT2FIX(3);
    2875           0 :                 return 1;
    2876             :         default:
    2877           0 :                 return 0;
    2878             :         }
    2879           0 : }
    2880             : 
    2881             : 
    2882             : 
    2883             : GF_Node *CompositeTexture2D_Create()
    2884             : {
    2885             :         M_CompositeTexture2D *p;
    2886         246 :         GF_SAFEALLOC(p, M_CompositeTexture2D);
    2887          82 :         if(!p) return NULL;
    2888          82 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CompositeTexture2D);
    2889          82 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    2890             : 
    2891             :         /*default field values*/
    2892          82 :         p->pixelWidth = -1;
    2893          82 :         p->pixelHeight = -1;
    2894          82 :         p->repeatSandT = 3;
    2895          82 :         return (GF_Node *)p;
    2896          82 : }
    2897             : 
    2898             : 
    2899             : /*
    2900             :         CompositeTexture3D Node deletion
    2901             : */
    2902             : 
    2903             : static void CompositeTexture3D_Del(GF_Node *node)
    2904             : {
    2905          72 :         M_CompositeTexture3D *p = (M_CompositeTexture3D *) node;
    2906          36 :         gf_node_unregister((GF_Node *) p->background, (GF_Node *) p);
    2907          36 :         gf_node_unregister((GF_Node *) p->fog, (GF_Node *) p);
    2908          36 :         gf_node_unregister((GF_Node *) p->navigationInfo, (GF_Node *) p);
    2909          36 :         gf_node_unregister((GF_Node *) p->viewpoint, (GF_Node *) p);
    2910          36 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    2911          36 :         gf_node_free((GF_Node *) p);
    2912          36 : }
    2913             : 
    2914             : static const u16 CompositeTexture3D_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10};
    2915             : static const u16 CompositeTexture3D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    2916             : static const u16 CompositeTexture3D_Out2All[] = { 2, 3, 4, 5, 6, 7, 8};
    2917             : 
    2918             : static u32 CompositeTexture3D_get_field_count(GF_Node *node, u8 IndexMode)
    2919             : {
    2920          64 :         switch(IndexMode) {
    2921             :         case GF_SG_FIELD_CODING_IN:
    2922           0 :                 return 9;
    2923             :         case GF_SG_FIELD_CODING_DEF:
    2924          18 :                 return 9;
    2925             :         case GF_SG_FIELD_CODING_OUT:
    2926           0 :                 return 7;
    2927             :         case GF_SG_FIELD_CODING_DYN:
    2928           0 :                 return 0;
    2929             :         default:
    2930          14 :                 return 11;
    2931             :         }
    2932          32 : }
    2933             : 
    2934             : static GF_Err CompositeTexture3D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2935             : {
    2936         132 :         switch(IndexMode) {
    2937             :         case GF_SG_FIELD_CODING_IN:
    2938           0 :                 *allField = CompositeTexture3D_In2All[inField];
    2939           0 :                 return GF_OK;
    2940             :         case GF_SG_FIELD_CODING_DEF:
    2941          66 :                 *allField = CompositeTexture3D_Def2All[inField];
    2942          66 :                 return GF_OK;
    2943             :         case GF_SG_FIELD_CODING_OUT:
    2944           0 :                 *allField = CompositeTexture3D_Out2All[inField];
    2945           0 :                 return GF_OK;
    2946             :         default:
    2947           0 :                 return GF_BAD_PARAM;
    2948             :         }
    2949          66 : }
    2950             : static GF_Err CompositeTexture3D_get_field(GF_Node *node, GF_FieldInfo *info)
    2951             : {
    2952         704 :         switch (info->fieldIndex) {
    2953             :         case 0:
    2954          14 :                 info->name = "addChildren";
    2955          14 :                 info->eventType = GF_SG_EVENT_IN;
    2956          14 :                 info->on_event_in = ((M_CompositeTexture3D *)node)->on_addChildren;
    2957          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2958          14 :                 info->NDTtype = NDT_SF3DNode;
    2959          14 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->addChildren;
    2960          14 :                 return GF_OK;
    2961             :         case 1:
    2962          14 :                 info->name = "removeChildren";
    2963          14 :                 info->eventType = GF_SG_EVENT_IN;
    2964          14 :                 info->on_event_in = ((M_CompositeTexture3D *)node)->on_removeChildren;
    2965          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2966          14 :                 info->NDTtype = NDT_SF3DNode;
    2967          14 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->removeChildren;
    2968          14 :                 return GF_OK;
    2969             :         case 2:
    2970          48 :                 info->name = "children";
    2971          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2972          48 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2973          48 :                 info->NDTtype = NDT_SF3DNode;
    2974          48 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->children;
    2975          48 :                 return GF_OK;
    2976             :         case 3:
    2977          66 :                 info->name = "pixelWidth";
    2978          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2979          66 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2980          66 :                 info->far_ptr = & ((M_CompositeTexture3D *) node)->pixelWidth;
    2981          66 :                 return GF_OK;
    2982             :         case 4:
    2983          66 :                 info->name = "pixelHeight";
    2984          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2985          66 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2986          66 :                 info->far_ptr = & ((M_CompositeTexture3D *) node)->pixelHeight;
    2987          66 :                 return GF_OK;
    2988             :         case 5:
    2989          18 :                 info->name = "background";
    2990          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2991          18 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2992          18 :                 info->NDTtype = NDT_SFBackground3DNode;
    2993          18 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->background;
    2994          18 :                 return GF_OK;
    2995             :         case 6:
    2996          18 :                 info->name = "fog";
    2997          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2998          18 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2999          18 :                 info->NDTtype = NDT_SFFogNode;
    3000          18 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->fog;
    3001          18 :                 return GF_OK;
    3002             :         case 7:
    3003          18 :                 info->name = "navigationInfo";
    3004          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3005          18 :                 info->fieldType = GF_SG_VRML_SFNODE;
    3006          18 :                 info->NDTtype = NDT_SFNavigationInfoNode;
    3007          18 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->navigationInfo;
    3008          18 :                 return GF_OK;
    3009             :         case 8:
    3010          18 :                 info->name = "viewpoint";
    3011          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3012          18 :                 info->fieldType = GF_SG_VRML_SFNODE;
    3013          18 :                 info->NDTtype = NDT_SFViewpointNode;
    3014          18 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->viewpoint;
    3015          18 :                 return GF_OK;
    3016             :         case 9:
    3017          36 :                 info->name = "repeatS";
    3018          36 :                 info->eventType = GF_SG_EVENT_FIELD;
    3019          36 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3020          36 :                 info->far_ptr = & ((M_CompositeTexture3D *) node)->repeatS;
    3021          36 :                 return GF_OK;
    3022             :         case 10:
    3023          36 :                 info->name = "repeatT";
    3024          36 :                 info->eventType = GF_SG_EVENT_FIELD;
    3025          36 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3026          36 :                 info->far_ptr = & ((M_CompositeTexture3D *) node)->repeatT;
    3027          36 :                 return GF_OK;
    3028             :         default:
    3029           0 :                 return GF_BAD_PARAM;
    3030             :         }
    3031         352 : }
    3032             : 
    3033             : 
    3034             : static s32 CompositeTexture3D_get_field_index_by_name(char *name)
    3035             : {
    3036          48 :         if (!strcmp("addChildren", name)) return 0;
    3037          24 :         if (!strcmp("removeChildren", name)) return 1;
    3038          32 :         if (!strcmp("children", name)) return 2;
    3039          24 :         if (!strcmp("pixelWidth", name)) return 3;
    3040          16 :         if (!strcmp("pixelHeight", name)) return 4;
    3041           0 :         if (!strcmp("background", name)) return 5;
    3042           0 :         if (!strcmp("fog", name)) return 6;
    3043           0 :         if (!strcmp("navigationInfo", name)) return 7;
    3044           0 :         if (!strcmp("viewpoint", name)) return 8;
    3045           0 :         if (!strcmp("repeatS", name)) return 9;
    3046           0 :         if (!strcmp("repeatT", name)) return 10;
    3047           0 :         return -1;
    3048          24 : }
    3049             : static Bool CompositeTexture3D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3050             : {
    3051           0 :         switch (FieldIndex) {
    3052             :         case 3:
    3053           0 :                 *AType = 0;
    3054           0 :                 *QType = 13;
    3055           0 :                 *QT13_bits = 16;
    3056           0 :                 *b_min = FLT2FIX(0);
    3057           0 :                 *b_max = FIX_MAX;
    3058           0 :                 return 1;
    3059             :         case 4:
    3060           0 :                 *AType = 0;
    3061           0 :                 *QType = 13;
    3062           0 :                 *QT13_bits = 16;
    3063           0 :                 *b_min = FLT2FIX(0);
    3064           0 :                 *b_max = FIX_MAX;
    3065           0 :                 return 1;
    3066             :         default:
    3067           0 :                 return 0;
    3068             :         }
    3069           0 : }
    3070             : 
    3071             : 
    3072             : 
    3073             : GF_Node *CompositeTexture3D_Create()
    3074             : {
    3075             :         M_CompositeTexture3D *p;
    3076         108 :         GF_SAFEALLOC(p, M_CompositeTexture3D);
    3077          36 :         if(!p) return NULL;
    3078          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CompositeTexture3D);
    3079          36 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    3080             : 
    3081             :         /*default field values*/
    3082          36 :         p->pixelWidth = -1;
    3083          36 :         p->pixelHeight = -1;
    3084          36 :         p->repeatS = 1;
    3085          36 :         p->repeatT = 1;
    3086          36 :         return (GF_Node *)p;
    3087          36 : }
    3088             : 
    3089             : 
    3090             : /*
    3091             :         Conditional Node deletion
    3092             : */
    3093             : 
    3094             : static void Conditional_Del(GF_Node *node)
    3095             : {
    3096       17718 :         M_Conditional *p = (M_Conditional *) node;
    3097        8859 :         gf_sg_sfcommand_del(p->buffer);
    3098        8859 :         gf_node_free((GF_Node *) p);
    3099        8859 : }
    3100             : 
    3101             : static const u16 Conditional_Def2All[] = { 2};
    3102             : static const u16 Conditional_In2All[] = { 0, 1, 2};
    3103             : static const u16 Conditional_Out2All[] = { 2, 3};
    3104             : 
    3105             : static u32 Conditional_get_field_count(GF_Node *node, u8 IndexMode)
    3106             : {
    3107       24310 :         switch(IndexMode) {
    3108             :         case GF_SG_FIELD_CODING_IN:
    3109        4131 :                 return 3;
    3110             :         case GF_SG_FIELD_CODING_DEF:
    3111        4050 :                 return 1;
    3112             :         case GF_SG_FIELD_CODING_OUT:
    3113           0 :                 return 2;
    3114             :         case GF_SG_FIELD_CODING_DYN:
    3115           0 :                 return 0;
    3116             :         default:
    3117        3974 :                 return 4;
    3118             :         }
    3119       12155 : }
    3120             : 
    3121             : static GF_Err Conditional_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3122             : {
    3123       13206 :         switch(IndexMode) {
    3124             :         case GF_SG_FIELD_CODING_IN:
    3125        3459 :                 *allField = Conditional_In2All[inField];
    3126        3459 :                 return GF_OK;
    3127             :         case GF_SG_FIELD_CODING_DEF:
    3128        3144 :                 *allField = Conditional_Def2All[inField];
    3129        3144 :                 return GF_OK;
    3130             :         case GF_SG_FIELD_CODING_OUT:
    3131           0 :                 *allField = Conditional_Out2All[inField];
    3132           0 :                 return GF_OK;
    3133             :         default:
    3134           0 :                 return GF_BAD_PARAM;
    3135             :         }
    3136        6603 : }
    3137             : static GF_Err Conditional_get_field(GF_Node *node, GF_FieldInfo *info)
    3138             : {
    3139       58234 :         switch (info->fieldIndex) {
    3140             :         case 0:
    3141        6619 :                 info->name = "activate";
    3142        6619 :                 info->eventType = GF_SG_EVENT_IN;
    3143        6619 :                 info->on_event_in = ((M_Conditional *)node)->on_activate;
    3144        6619 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3145        6619 :                 info->far_ptr = & ((M_Conditional *) node)->activate;
    3146        6619 :                 return GF_OK;
    3147             :         case 1:
    3148        4939 :                 info->name = "reverseActivate";
    3149        4939 :                 info->eventType = GF_SG_EVENT_IN;
    3150        4939 :                 info->on_event_in = ((M_Conditional *)node)->on_reverseActivate;
    3151        4939 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3152        4939 :                 info->far_ptr = & ((M_Conditional *) node)->reverseActivate;
    3153        4939 :                 return GF_OK;
    3154             :         case 2:
    3155       13648 :                 info->name = "buffer";
    3156       13648 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3157       13648 :                 info->fieldType = GF_SG_VRML_SFCOMMANDBUFFER;
    3158       13648 :                 info->far_ptr = & ((M_Conditional *) node)->buffer;
    3159       13648 :                 return GF_OK;
    3160             :         case 3:
    3161        3911 :                 info->name = "isActive";
    3162        3911 :                 info->eventType = GF_SG_EVENT_OUT;
    3163        3911 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3164        3911 :                 info->far_ptr = & ((M_Conditional *) node)->isActive;
    3165        3911 :                 return GF_OK;
    3166             :         default:
    3167           0 :                 return GF_BAD_PARAM;
    3168             :         }
    3169       29117 : }
    3170             : 
    3171             : 
    3172             : static s32 Conditional_get_field_index_by_name(char *name)
    3173             : {
    3174        8684 :         if (!strcmp("activate", name)) return 0;
    3175        2828 :         if (!strcmp("reverseActivate", name)) return 1;
    3176        3624 :         if (!strcmp("buffer", name)) return 2;
    3177           0 :         if (!strcmp("isActive", name)) return 3;
    3178           0 :         return -1;
    3179        3668 : }
    3180             : static Bool Conditional_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3181             : {
    3182             :         switch (FieldIndex) {
    3183             :         default:
    3184           0 :                 return 0;
    3185             :         }
    3186             : }
    3187             : 
    3188             : 
    3189             : 
    3190             : GF_Node *Conditional_Create()
    3191             : {
    3192             :         M_Conditional *p;
    3193       26577 :         GF_SAFEALLOC(p, M_Conditional);
    3194        8859 :         if(!p) return NULL;
    3195        8859 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Conditional);
    3196        8859 :         p->buffer.commandList = gf_list_new();
    3197             : 
    3198             :         /*default field values*/
    3199        8859 :         return (GF_Node *)p;
    3200        8859 : }
    3201             : 
    3202             : 
    3203             : /*
    3204             :         Cone Node deletion
    3205             : */
    3206             : 
    3207             : static void Cone_Del(GF_Node *node)
    3208             : {
    3209         216 :         M_Cone *p = (M_Cone *) node;
    3210         108 :         gf_node_free((GF_Node *) p);
    3211         108 : }
    3212             : 
    3213             : static const u16 Cone_Def2All[] = { 0, 1, 2, 3};
    3214             : 
    3215             : static u32 Cone_get_field_count(GF_Node *node, u8 IndexMode)
    3216             : {
    3217         192 :         switch(IndexMode) {
    3218             :         case GF_SG_FIELD_CODING_IN:
    3219           0 :                 return 0;
    3220             :         case GF_SG_FIELD_CODING_DEF:
    3221          54 :                 return 4;
    3222             :         case GF_SG_FIELD_CODING_OUT:
    3223           0 :                 return 0;
    3224             :         case GF_SG_FIELD_CODING_DYN:
    3225           0 :                 return 0;
    3226             :         default:
    3227          42 :                 return 4;
    3228             :         }
    3229          96 : }
    3230             : 
    3231             : static GF_Err Cone_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3232             : {
    3233         246 :         switch(IndexMode) {
    3234             :         case GF_SG_FIELD_CODING_DEF:
    3235         123 :                 *allField = Cone_Def2All[inField];
    3236         123 :                 return GF_OK;
    3237             :         default:
    3238           0 :                 return GF_BAD_PARAM;
    3239             :         }
    3240         123 : }
    3241             : static GF_Err Cone_get_field(GF_Node *node, GF_FieldInfo *info)
    3242             : {
    3243        1314 :         switch (info->fieldIndex) {
    3244             :         case 0:
    3245         198 :                 info->name = "bottomRadius";
    3246         198 :                 info->eventType = GF_SG_EVENT_FIELD;
    3247         198 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3248         198 :                 info->far_ptr = & ((M_Cone *) node)->bottomRadius;
    3249         198 :                 return GF_OK;
    3250             :         case 1:
    3251         198 :                 info->name = "height";
    3252         198 :                 info->eventType = GF_SG_EVENT_FIELD;
    3253         198 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3254         198 :                 info->far_ptr = & ((M_Cone *) node)->height;
    3255         198 :                 return GF_OK;
    3256             :         case 2:
    3257         108 :                 info->name = "side";
    3258         108 :                 info->eventType = GF_SG_EVENT_FIELD;
    3259         108 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3260         108 :                 info->far_ptr = & ((M_Cone *) node)->side;
    3261         108 :                 return GF_OK;
    3262             :         case 3:
    3263         153 :                 info->name = "bottom";
    3264         153 :                 info->eventType = GF_SG_EVENT_FIELD;
    3265         153 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3266         153 :                 info->far_ptr = & ((M_Cone *) node)->bottom;
    3267         153 :                 return GF_OK;
    3268             :         default:
    3269           0 :                 return GF_BAD_PARAM;
    3270             :         }
    3271         657 : }
    3272             : 
    3273             : 
    3274             : static s32 Cone_get_field_index_by_name(char *name)
    3275             : {
    3276         144 :         if (!strcmp("bottomRadius", name)) return 0;
    3277          60 :         if (!strcmp("height", name)) return 1;
    3278          12 :         if (!strcmp("side", name)) return 2;
    3279          24 :         if (!strcmp("bottom", name)) return 3;
    3280           0 :         return -1;
    3281          60 : }
    3282             : static Bool Cone_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3283             : {
    3284           0 :         switch (FieldIndex) {
    3285             :         case 0:
    3286           0 :                 *AType = 0;
    3287           0 :                 *QType = 11;
    3288           0 :                 *b_min = FLT2FIX(0);
    3289           0 :                 *b_max = FIX_MAX;
    3290           0 :                 return 1;
    3291             :         case 1:
    3292           0 :                 *AType = 0;
    3293           0 :                 *QType = 11;
    3294           0 :                 *b_min = FLT2FIX(0);
    3295           0 :                 *b_max = FIX_MAX;
    3296           0 :                 return 1;
    3297             :         default:
    3298           0 :                 return 0;
    3299             :         }
    3300           0 : }
    3301             : 
    3302             : 
    3303             : 
    3304             : GF_Node *Cone_Create()
    3305             : {
    3306             :         M_Cone *p;
    3307         324 :         GF_SAFEALLOC(p, M_Cone);
    3308         108 :         if(!p) return NULL;
    3309         108 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Cone);
    3310             : 
    3311             :         /*default field values*/
    3312         108 :         p->bottomRadius = FLT2FIX(1);
    3313         108 :         p->height = FLT2FIX(2);
    3314         108 :         p->side = 1;
    3315         108 :         p->bottom = 1;
    3316         108 :         return (GF_Node *)p;
    3317         108 : }
    3318             : 
    3319             : 
    3320             : /*
    3321             :         Coordinate Node deletion
    3322             : */
    3323             : 
    3324             : static void Coordinate_Del(GF_Node *node)
    3325             : {
    3326         170 :         M_Coordinate *p = (M_Coordinate *) node;
    3327          85 :         gf_sg_mfvec3f_del(p->point);
    3328          85 :         gf_node_free((GF_Node *) p);
    3329          85 : }
    3330             : 
    3331             : static const u16 Coordinate_Def2All[] = { 0};
    3332             : static const u16 Coordinate_In2All[] = { 0};
    3333             : static const u16 Coordinate_Out2All[] = { 0};
    3334             : static const u16 Coordinate_Dyn2All[] = { 0};
    3335             : 
    3336             : static u32 Coordinate_get_field_count(GF_Node *node, u8 IndexMode)
    3337             : {
    3338         146 :         switch(IndexMode) {
    3339             :         case GF_SG_FIELD_CODING_IN:
    3340           0 :                 return 1;
    3341             :         case GF_SG_FIELD_CODING_DEF:
    3342          36 :                 return 1;
    3343             :         case GF_SG_FIELD_CODING_OUT:
    3344           0 :                 return 1;
    3345             :         case GF_SG_FIELD_CODING_DYN:
    3346           0 :                 return 1;
    3347             :         default:
    3348          37 :                 return 1;
    3349             :         }
    3350          73 : }
    3351             : 
    3352             : static GF_Err Coordinate_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3353             : {
    3354          56 :         switch(IndexMode) {
    3355             :         case GF_SG_FIELD_CODING_IN:
    3356           0 :                 *allField = Coordinate_In2All[inField];
    3357           0 :                 return GF_OK;
    3358             :         case GF_SG_FIELD_CODING_DEF:
    3359          28 :                 *allField = Coordinate_Def2All[inField];
    3360          28 :                 return GF_OK;
    3361             :         case GF_SG_FIELD_CODING_OUT:
    3362           0 :                 *allField = Coordinate_Out2All[inField];
    3363           0 :                 return GF_OK;
    3364             :         case GF_SG_FIELD_CODING_DYN:
    3365           0 :                 *allField = Coordinate_Dyn2All[inField];
    3366           0 :                 return GF_OK;
    3367             :         default:
    3368           0 :                 return GF_BAD_PARAM;
    3369             :         }
    3370          28 : }
    3371             : static GF_Err Coordinate_get_field(GF_Node *node, GF_FieldInfo *info)
    3372             : {
    3373         300 :         switch (info->fieldIndex) {
    3374             :         case 0:
    3375         150 :                 info->name = "point";
    3376         150 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3377         150 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    3378         150 :                 info->far_ptr = & ((M_Coordinate *) node)->point;
    3379         150 :                 return GF_OK;
    3380             :         default:
    3381           0 :                 return GF_BAD_PARAM;
    3382             :         }
    3383         150 : }
    3384             : 
    3385             : 
    3386             : static s32 Coordinate_get_field_index_by_name(char *name)
    3387             : {
    3388          48 :         if (!strcmp("point", name)) return 0;
    3389           0 :         return -1;
    3390          16 : }
    3391             : static Bool Coordinate_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3392             : {
    3393           0 :         switch (FieldIndex) {
    3394             :         case 0:
    3395           0 :                 *AType = 1;
    3396           0 :                 *QType = 1;
    3397           0 :                 *b_min = FIX_MIN;
    3398           0 :                 *b_max = FIX_MAX;
    3399           0 :                 return 1;
    3400             :         default:
    3401           0 :                 return 0;
    3402             :         }
    3403           0 : }
    3404             : 
    3405             : 
    3406             : 
    3407             : GF_Node *Coordinate_Create()
    3408             : {
    3409             :         M_Coordinate *p;
    3410         255 :         GF_SAFEALLOC(p, M_Coordinate);
    3411          85 :         if(!p) return NULL;
    3412          85 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Coordinate);
    3413             : 
    3414             :         /*default field values*/
    3415          85 :         return (GF_Node *)p;
    3416          85 : }
    3417             : 
    3418             : 
    3419             : /*
    3420             :         Coordinate2D Node deletion
    3421             : */
    3422             : 
    3423             : static void Coordinate2D_Del(GF_Node *node)
    3424             : {
    3425        8268 :         M_Coordinate2D *p = (M_Coordinate2D *) node;
    3426        4134 :         gf_sg_mfvec2f_del(p->point);
    3427        4134 :         gf_node_free((GF_Node *) p);
    3428        4134 : }
    3429             : 
    3430             : static const u16 Coordinate2D_Def2All[] = { 0};
    3431             : static const u16 Coordinate2D_In2All[] = { 0};
    3432             : static const u16 Coordinate2D_Out2All[] = { 0};
    3433             : static const u16 Coordinate2D_Dyn2All[] = { 0};
    3434             : 
    3435             : static u32 Coordinate2D_get_field_count(GF_Node *node, u8 IndexMode)
    3436             : {
    3437        7856 :         switch(IndexMode) {
    3438             :         case GF_SG_FIELD_CODING_IN:
    3439          63 :                 return 1;
    3440             :         case GF_SG_FIELD_CODING_DEF:
    3441        2002 :                 return 1;
    3442             :         case GF_SG_FIELD_CODING_OUT:
    3443           0 :                 return 1;
    3444             :         case GF_SG_FIELD_CODING_DYN:
    3445           0 :                 return 1;
    3446             :         default:
    3447        1863 :                 return 1;
    3448             :         }
    3449        3928 : }
    3450             : 
    3451             : static GF_Err Coordinate2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3452             : {
    3453        2600 :         switch(IndexMode) {
    3454             :         case GF_SG_FIELD_CODING_IN:
    3455          49 :                 *allField = Coordinate2D_In2All[inField];
    3456          49 :                 return GF_OK;
    3457             :         case GF_SG_FIELD_CODING_DEF:
    3458        1251 :                 *allField = Coordinate2D_Def2All[inField];
    3459        1251 :                 return GF_OK;
    3460             :         case GF_SG_FIELD_CODING_OUT:
    3461           0 :                 *allField = Coordinate2D_Out2All[inField];
    3462           0 :                 return GF_OK;
    3463             :         case GF_SG_FIELD_CODING_DYN:
    3464           0 :                 *allField = Coordinate2D_Dyn2All[inField];
    3465           0 :                 return GF_OK;
    3466             :         default:
    3467           0 :                 return GF_BAD_PARAM;
    3468             :         }
    3469        1300 : }
    3470             : static GF_Err Coordinate2D_get_field(GF_Node *node, GF_FieldInfo *info)
    3471             : {
    3472       16366 :         switch (info->fieldIndex) {
    3473             :         case 0:
    3474        8183 :                 info->name = "point";
    3475        8183 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3476        8183 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    3477        8183 :                 info->far_ptr = & ((M_Coordinate2D *) node)->point;
    3478        8183 :                 return GF_OK;
    3479             :         default:
    3480           0 :                 return GF_BAD_PARAM;
    3481             :         }
    3482        8183 : }
    3483             : 
    3484             : 
    3485             : static s32 Coordinate2D_get_field_index_by_name(char *name)
    3486             : {
    3487        4320 :         if (!strcmp("point", name)) return 0;
    3488           0 :         return -1;
    3489        1440 : }
    3490             : static Bool Coordinate2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3491             : {
    3492         588 :         switch (FieldIndex) {
    3493             :         case 0:
    3494         294 :                 *AType = 2;
    3495         294 :                 *QType = 2;
    3496         294 :                 *b_min = FIX_MIN;
    3497         294 :                 *b_max = FIX_MAX;
    3498         294 :                 return 1;
    3499             :         default:
    3500           0 :                 return 0;
    3501             :         }
    3502         294 : }
    3503             : 
    3504             : 
    3505             : 
    3506             : GF_Node *Coordinate2D_Create()
    3507             : {
    3508             :         M_Coordinate2D *p;
    3509       12402 :         GF_SAFEALLOC(p, M_Coordinate2D);
    3510        4134 :         if(!p) return NULL;
    3511        4134 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Coordinate2D);
    3512             : 
    3513             :         /*default field values*/
    3514        4134 :         return (GF_Node *)p;
    3515        4134 : }
    3516             : 
    3517             : 
    3518             : /*
    3519             :         CoordinateInterpolator Node deletion
    3520             : */
    3521             : 
    3522             : static void CoordinateInterpolator_Del(GF_Node *node)
    3523             : {
    3524           0 :         M_CoordinateInterpolator *p = (M_CoordinateInterpolator *) node;
    3525           0 :         gf_sg_mffloat_del(p->key);
    3526           0 :         gf_sg_mfvec3f_del(p->keyValue);
    3527           0 :         gf_sg_mfvec3f_del(p->value_changed);
    3528           0 :         gf_node_free((GF_Node *) p);
    3529           0 : }
    3530             : 
    3531             : static const u16 CoordinateInterpolator_Def2All[] = { 1, 2};
    3532             : static const u16 CoordinateInterpolator_In2All[] = { 0, 1, 2};
    3533             : static const u16 CoordinateInterpolator_Out2All[] = { 1, 2, 3};
    3534             : 
    3535             : static u32 CoordinateInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
    3536             : {
    3537           0 :         switch(IndexMode) {
    3538             :         case GF_SG_FIELD_CODING_IN:
    3539           0 :                 return 3;
    3540             :         case GF_SG_FIELD_CODING_DEF:
    3541           0 :                 return 2;
    3542             :         case GF_SG_FIELD_CODING_OUT:
    3543           0 :                 return 3;
    3544             :         case GF_SG_FIELD_CODING_DYN:
    3545           0 :                 return 0;
    3546             :         default:
    3547           0 :                 return 4;
    3548             :         }
    3549           0 : }
    3550             : 
    3551             : static GF_Err CoordinateInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3552             : {
    3553           0 :         switch(IndexMode) {
    3554             :         case GF_SG_FIELD_CODING_IN:
    3555           0 :                 *allField = CoordinateInterpolator_In2All[inField];
    3556           0 :                 return GF_OK;
    3557             :         case GF_SG_FIELD_CODING_DEF:
    3558           0 :                 *allField = CoordinateInterpolator_Def2All[inField];
    3559           0 :                 return GF_OK;
    3560             :         case GF_SG_FIELD_CODING_OUT:
    3561           0 :                 *allField = CoordinateInterpolator_Out2All[inField];
    3562           0 :                 return GF_OK;
    3563             :         default:
    3564           0 :                 return GF_BAD_PARAM;
    3565             :         }
    3566           0 : }
    3567             : static GF_Err CoordinateInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
    3568             : {
    3569           0 :         switch (info->fieldIndex) {
    3570             :         case 0:
    3571           0 :                 info->name = "set_fraction";
    3572           0 :                 info->eventType = GF_SG_EVENT_IN;
    3573           0 :                 info->on_event_in = ((M_CoordinateInterpolator *)node)->on_set_fraction;
    3574           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3575           0 :                 info->far_ptr = & ((M_CoordinateInterpolator *) node)->set_fraction;
    3576           0 :                 return GF_OK;
    3577             :         case 1:
    3578           0 :                 info->name = "key";
    3579           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3580           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    3581           0 :                 info->far_ptr = & ((M_CoordinateInterpolator *) node)->key;
    3582           0 :                 return GF_OK;
    3583             :         case 2:
    3584           0 :                 info->name = "keyValue";
    3585           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3586           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    3587           0 :                 info->far_ptr = & ((M_CoordinateInterpolator *) node)->keyValue;
    3588           0 :                 return GF_OK;
    3589             :         case 3:
    3590           0 :                 info->name = "value_changed";
    3591           0 :                 info->eventType = GF_SG_EVENT_OUT;
    3592           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    3593           0 :                 info->far_ptr = & ((M_CoordinateInterpolator *) node)->value_changed;
    3594           0 :                 return GF_OK;
    3595             :         default:
    3596           0 :                 return GF_BAD_PARAM;
    3597             :         }
    3598           0 : }
    3599             : 
    3600             : 
    3601             : static s32 CoordinateInterpolator_get_field_index_by_name(char *name)
    3602             : {
    3603           0 :         if (!strcmp("set_fraction", name)) return 0;
    3604           0 :         if (!strcmp("key", name)) return 1;
    3605           0 :         if (!strcmp("keyValue", name)) return 2;
    3606           0 :         if (!strcmp("value_changed", name)) return 3;
    3607           0 :         return -1;
    3608           0 : }
    3609             : static Bool CoordinateInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3610             : {
    3611           0 :         switch (FieldIndex) {
    3612             :         case 1:
    3613           0 :                 *AType = 0;
    3614           0 :                 *QType = 8;
    3615           0 :                 *b_min = FLT2FIX(0);
    3616           0 :                 *b_max = FLT2FIX(1);
    3617           0 :                 return 1;
    3618             :         case 2:
    3619           0 :                 *AType = 0;
    3620           0 :                 *QType = 1;
    3621           0 :                 *b_min = FIX_MIN;
    3622           0 :                 *b_max = FIX_MAX;
    3623           0 :                 return 1;
    3624             :         default:
    3625           0 :                 return 0;
    3626             :         }
    3627           0 : }
    3628             : 
    3629             : 
    3630             : 
    3631             : GF_Node *CoordinateInterpolator_Create()
    3632             : {
    3633             :         M_CoordinateInterpolator *p;
    3634           0 :         GF_SAFEALLOC(p, M_CoordinateInterpolator);
    3635           0 :         if(!p) return NULL;
    3636           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CoordinateInterpolator);
    3637             : 
    3638             :         /*default field values*/
    3639           0 :         return (GF_Node *)p;
    3640           0 : }
    3641             : 
    3642             : 
    3643             : /*
    3644             :         CoordinateInterpolator2D Node deletion
    3645             : */
    3646             : 
    3647             : static void CoordinateInterpolator2D_Del(GF_Node *node)
    3648             : {
    3649          72 :         M_CoordinateInterpolator2D *p = (M_CoordinateInterpolator2D *) node;
    3650          36 :         gf_sg_mffloat_del(p->key);
    3651          36 :         gf_sg_mfvec2f_del(p->keyValue);
    3652          36 :         gf_sg_mfvec2f_del(p->value_changed);
    3653          36 :         gf_node_free((GF_Node *) p);
    3654          36 : }
    3655             : 
    3656             : static const u16 CoordinateInterpolator2D_Def2All[] = { 1, 2};
    3657             : static const u16 CoordinateInterpolator2D_In2All[] = { 0, 1, 2};
    3658             : static const u16 CoordinateInterpolator2D_Out2All[] = { 1, 2, 3};
    3659             : 
    3660             : static u32 CoordinateInterpolator2D_get_field_count(GF_Node *node, u8 IndexMode)
    3661             : {
    3662         136 :         switch(IndexMode) {
    3663             :         case GF_SG_FIELD_CODING_IN:
    3664          18 :                 return 3;
    3665             :         case GF_SG_FIELD_CODING_DEF:
    3666          18 :                 return 2;
    3667             :         case GF_SG_FIELD_CODING_OUT:
    3668          18 :                 return 3;
    3669             :         case GF_SG_FIELD_CODING_DYN:
    3670           0 :                 return 0;
    3671             :         default:
    3672          14 :                 return 4;
    3673             :         }
    3674          68 : }
    3675             : 
    3676             : static GF_Err CoordinateInterpolator2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3677             : {
    3678         128 :         switch(IndexMode) {
    3679             :         case GF_SG_FIELD_CODING_IN:
    3680          14 :                 *allField = CoordinateInterpolator2D_In2All[inField];
    3681          14 :                 return GF_OK;
    3682             :         case GF_SG_FIELD_CODING_DEF:
    3683          28 :                 *allField = CoordinateInterpolator2D_Def2All[inField];
    3684          28 :                 return GF_OK;
    3685             :         case GF_SG_FIELD_CODING_OUT:
    3686          22 :                 *allField = CoordinateInterpolator2D_Out2All[inField];
    3687          22 :                 return GF_OK;
    3688             :         default:
    3689           0 :                 return GF_BAD_PARAM;
    3690             :         }
    3691          64 : }
    3692             : static GF_Err CoordinateInterpolator2D_get_field(GF_Node *node, GF_FieldInfo *info)
    3693             : {
    3694         384 :         switch (info->fieldIndex) {
    3695             :         case 0:
    3696          30 :                 info->name = "set_fraction";
    3697          30 :                 info->eventType = GF_SG_EVENT_IN;
    3698          30 :                 info->on_event_in = ((M_CoordinateInterpolator2D *)node)->on_set_fraction;
    3699          30 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3700          30 :                 info->far_ptr = & ((M_CoordinateInterpolator2D *) node)->set_fraction;
    3701          30 :                 return GF_OK;
    3702             :         case 1:
    3703          66 :                 info->name = "key";
    3704          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3705          66 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    3706          66 :                 info->far_ptr = & ((M_CoordinateInterpolator2D *) node)->key;
    3707          66 :                 return GF_OK;
    3708             :         case 2:
    3709          66 :                 info->name = "keyValue";
    3710          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3711          66 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    3712          66 :                 info->far_ptr = & ((M_CoordinateInterpolator2D *) node)->keyValue;
    3713          66 :                 return GF_OK;
    3714             :         case 3:
    3715          30 :                 info->name = "value_changed";
    3716          30 :                 info->eventType = GF_SG_EVENT_OUT;
    3717          30 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    3718          30 :                 info->far_ptr = & ((M_CoordinateInterpolator2D *) node)->value_changed;
    3719          30 :                 return GF_OK;
    3720             :         default:
    3721           0 :                 return GF_BAD_PARAM;
    3722             :         }
    3723         192 : }
    3724             : 
    3725             : 
    3726             : static s32 CoordinateInterpolator2D_get_field_index_by_name(char *name)
    3727             : {
    3728          72 :         if (!strcmp("set_fraction", name)) return 0;
    3729          32 :         if (!strcmp("key", name)) return 1;
    3730          24 :         if (!strcmp("keyValue", name)) return 2;
    3731          16 :         if (!strcmp("value_changed", name)) return 3;
    3732           0 :         return -1;
    3733          32 : }
    3734             : static Bool CoordinateInterpolator2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3735             : {
    3736           0 :         switch (FieldIndex) {
    3737             :         case 1:
    3738           0 :                 *AType = 0;
    3739           0 :                 *QType = 8;
    3740           0 :                 *b_min = FLT2FIX(0);
    3741           0 :                 *b_max = FLT2FIX(1);
    3742           0 :                 return 1;
    3743             :         case 2:
    3744           0 :                 *AType = 0;
    3745           0 :                 *QType = 2;
    3746           0 :                 *b_min = FIX_MIN;
    3747           0 :                 *b_max = FIX_MAX;
    3748           0 :                 return 1;
    3749             :         default:
    3750           0 :                 return 0;
    3751             :         }
    3752           0 : }
    3753             : 
    3754             : 
    3755             : 
    3756             : GF_Node *CoordinateInterpolator2D_Create()
    3757             : {
    3758             :         M_CoordinateInterpolator2D *p;
    3759         108 :         GF_SAFEALLOC(p, M_CoordinateInterpolator2D);
    3760          36 :         if(!p) return NULL;
    3761          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CoordinateInterpolator2D);
    3762             : 
    3763             :         /*default field values*/
    3764          36 :         return (GF_Node *)p;
    3765          36 : }
    3766             : 
    3767             : 
    3768             : /*
    3769             :         Curve2D Node deletion
    3770             : */
    3771             : 
    3772             : static void Curve2D_Del(GF_Node *node)
    3773             : {
    3774        3480 :         M_Curve2D *p = (M_Curve2D *) node;
    3775        1740 :         gf_node_unregister((GF_Node *) p->point, (GF_Node *) p);
    3776        1740 :         gf_sg_mfint32_del(p->type);
    3777        1740 :         gf_node_free((GF_Node *) p);
    3778        1740 : }
    3779             : 
    3780             : static const u16 Curve2D_Def2All[] = { 0, 1, 2};
    3781             : static const u16 Curve2D_In2All[] = { 0, 1, 2};
    3782             : static const u16 Curve2D_Out2All[] = { 0, 1, 2};
    3783             : static const u16 Curve2D_Dyn2All[] = { 1};
    3784             : 
    3785             : static u32 Curve2D_get_field_count(GF_Node *node, u8 IndexMode)
    3786             : {
    3787        3398 :         switch(IndexMode) {
    3788             :         case GF_SG_FIELD_CODING_IN:
    3789           0 :                 return 3;
    3790             :         case GF_SG_FIELD_CODING_DEF:
    3791        1056 :                 return 3;
    3792             :         case GF_SG_FIELD_CODING_OUT:
    3793           0 :                 return 3;
    3794             :         case GF_SG_FIELD_CODING_DYN:
    3795           0 :                 return 1;
    3796             :         default:
    3797         643 :                 return 3;
    3798             :         }
    3799        1699 : }
    3800             : 
    3801             : static GF_Err Curve2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3802             : {
    3803        2950 :         switch(IndexMode) {
    3804             :         case GF_SG_FIELD_CODING_IN:
    3805           0 :                 *allField = Curve2D_In2All[inField];
    3806           0 :                 return GF_OK;
    3807             :         case GF_SG_FIELD_CODING_DEF:
    3808        1475 :                 *allField = Curve2D_Def2All[inField];
    3809        1475 :                 return GF_OK;
    3810             :         case GF_SG_FIELD_CODING_OUT:
    3811           0 :                 *allField = Curve2D_Out2All[inField];
    3812           0 :                 return GF_OK;
    3813             :         case GF_SG_FIELD_CODING_DYN:
    3814           0 :                 *allField = Curve2D_Dyn2All[inField];
    3815           0 :                 return GF_OK;
    3816             :         default:
    3817           0 :                 return GF_BAD_PARAM;
    3818             :         }
    3819        1475 : }
    3820             : static GF_Err Curve2D_get_field(GF_Node *node, GF_FieldInfo *info)
    3821             : {
    3822       15834 :         switch (info->fieldIndex) {
    3823             :         case 0:
    3824        2813 :                 info->name = "point";
    3825        2813 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3826        2813 :                 info->fieldType = GF_SG_VRML_SFNODE;
    3827        2813 :                 info->NDTtype = NDT_SFCoordinate2DNode;
    3828        2813 :                 info->far_ptr = & ((M_Curve2D *)node)->point;
    3829        2813 :                 return GF_OK;
    3830             :         case 1:
    3831        2104 :                 info->name = "fineness";
    3832        2104 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3833        2104 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3834        2104 :                 info->far_ptr = & ((M_Curve2D *) node)->fineness;
    3835        2104 :                 return GF_OK;
    3836             :         case 2:
    3837        3000 :                 info->name = "type";
    3838        3000 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3839        3000 :                 info->fieldType = GF_SG_VRML_MFINT32;
    3840        3000 :                 info->far_ptr = & ((M_Curve2D *) node)->type;
    3841        3000 :                 return GF_OK;
    3842             :         default:
    3843           0 :                 return GF_BAD_PARAM;
    3844             :         }
    3845        7917 : }
    3846             : 
    3847             : 
    3848             : static s32 Curve2D_get_field_index_by_name(char *name)
    3849             : {
    3850        3864 :         if (!strcmp("point", name)) return 0;
    3851         417 :         if (!strcmp("fineness", name)) return 1;
    3852         786 :         if (!strcmp("type", name)) return 2;
    3853           0 :         return -1;
    3854        1423 : }
    3855             : static Bool Curve2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3856             : {
    3857           0 :         switch (FieldIndex) {
    3858             :         case 1:
    3859           0 :                 *AType = 7;
    3860           0 :                 *QType = 0;
    3861           0 :                 *b_min = FLT2FIX(0);
    3862           0 :                 *b_max = FLT2FIX(1);
    3863           0 :                 return 1;
    3864             :         case 2:
    3865           0 :                 *AType = 0;
    3866           0 :                 *QType = 13;
    3867           0 :                 *QT13_bits = 2;
    3868           0 :                 *b_min = FLT2FIX(0);
    3869           0 :                 *b_max = FLT2FIX(3);
    3870           0 :                 return 1;
    3871             :         default:
    3872           0 :                 return 0;
    3873             :         }
    3874           0 : }
    3875             : 
    3876             : 
    3877             : 
    3878             : GF_Node *Curve2D_Create()
    3879             : {
    3880             :         M_Curve2D *p;
    3881        5220 :         GF_SAFEALLOC(p, M_Curve2D);
    3882        1740 :         if(!p) return NULL;
    3883        1740 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Curve2D);
    3884             : 
    3885             :         /*default field values*/
    3886        1740 :         p->fineness = FLT2FIX(0.5);
    3887        1740 :         return (GF_Node *)p;
    3888        1740 : }
    3889             : 
    3890             : 
    3891             : /*
    3892             :         Cylinder Node deletion
    3893             : */
    3894             : 
    3895             : static void Cylinder_Del(GF_Node *node)
    3896             : {
    3897         540 :         M_Cylinder *p = (M_Cylinder *) node;
    3898         270 :         gf_node_free((GF_Node *) p);
    3899         270 : }
    3900             : 
    3901             : static const u16 Cylinder_Def2All[] = { 0, 1, 2, 3, 4};
    3902             : 
    3903             : static u32 Cylinder_get_field_count(GF_Node *node, u8 IndexMode)
    3904             : {
    3905         480 :         switch(IndexMode) {
    3906             :         case GF_SG_FIELD_CODING_IN:
    3907           0 :                 return 0;
    3908             :         case GF_SG_FIELD_CODING_DEF:
    3909         135 :                 return 5;
    3910             :         case GF_SG_FIELD_CODING_OUT:
    3911           0 :                 return 0;
    3912             :         case GF_SG_FIELD_CODING_DYN:
    3913           0 :                 return 0;
    3914             :         default:
    3915         105 :                 return 5;
    3916             :         }
    3917         240 : }
    3918             : 
    3919             : static GF_Err Cylinder_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3920             : {
    3921         750 :         switch(IndexMode) {
    3922             :         case GF_SG_FIELD_CODING_DEF:
    3923         375 :                 *allField = Cylinder_Def2All[inField];
    3924         375 :                 return GF_OK;
    3925             :         default:
    3926           0 :                 return GF_BAD_PARAM;
    3927             :         }
    3928         375 : }
    3929             : static GF_Err Cylinder_get_field(GF_Node *node, GF_FieldInfo *info)
    3930             : {
    3931        4050 :         switch (info->fieldIndex) {
    3932             :         case 0:
    3933         360 :                 info->name = "bottom";
    3934         360 :                 info->eventType = GF_SG_EVENT_FIELD;
    3935         360 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3936         360 :                 info->far_ptr = & ((M_Cylinder *) node)->bottom;
    3937         360 :                 return GF_OK;
    3938             :         case 1:
    3939         495 :                 info->name = "height";
    3940         495 :                 info->eventType = GF_SG_EVENT_FIELD;
    3941         495 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3942         495 :                 info->far_ptr = & ((M_Cylinder *) node)->height;
    3943         495 :                 return GF_OK;
    3944             :         case 2:
    3945         495 :                 info->name = "radius";
    3946         495 :                 info->eventType = GF_SG_EVENT_FIELD;
    3947         495 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3948         495 :                 info->far_ptr = & ((M_Cylinder *) node)->radius;
    3949         495 :                 return GF_OK;
    3950             :         case 3:
    3951         315 :                 info->name = "side";
    3952         315 :                 info->eventType = GF_SG_EVENT_FIELD;
    3953         315 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3954         315 :                 info->far_ptr = & ((M_Cylinder *) node)->side;
    3955         315 :                 return GF_OK;
    3956             :         case 4:
    3957         360 :                 info->name = "top";
    3958         360 :                 info->eventType = GF_SG_EVENT_FIELD;
    3959         360 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3960         360 :                 info->far_ptr = & ((M_Cylinder *) node)->top;
    3961         360 :                 return GF_OK;
    3962             :         default:
    3963           0 :                 return GF_BAD_PARAM;
    3964             :         }
    3965        2025 : }
    3966             : 
    3967             : 
    3968             : static s32 Cylinder_get_field_index_by_name(char *name)
    3969             : {
    3970         384 :         if (!strcmp("bottom", name)) return 0;
    3971         216 :         if (!strcmp("height", name)) return 1;
    3972         156 :         if (!strcmp("radius", name)) return 2;
    3973          48 :         if (!strcmp("side", name)) return 3;
    3974          48 :         if (!strcmp("top", name)) return 4;
    3975           0 :         return -1;
    3976         180 : }
    3977             : static Bool Cylinder_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3978             : {
    3979           0 :         switch (FieldIndex) {
    3980             :         case 1:
    3981           0 :                 *AType = 0;
    3982           0 :                 *QType = 11;
    3983           0 :                 *b_min = FLT2FIX(0);
    3984           0 :                 *b_max = FIX_MAX;
    3985           0 :                 return 1;
    3986             :         case 2:
    3987           0 :                 *AType = 0;
    3988           0 :                 *QType = 11;
    3989           0 :                 *b_min = FLT2FIX(0);
    3990           0 :                 *b_max = FIX_MAX;
    3991           0 :                 return 1;
    3992             :         default:
    3993           0 :                 return 0;
    3994             :         }
    3995           0 : }
    3996             : 
    3997             : 
    3998             : 
    3999             : GF_Node *Cylinder_Create()
    4000             : {
    4001             :         M_Cylinder *p;
    4002         810 :         GF_SAFEALLOC(p, M_Cylinder);
    4003         270 :         if(!p) return NULL;
    4004         270 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Cylinder);
    4005             : 
    4006             :         /*default field values*/
    4007         270 :         p->bottom = 1;
    4008         270 :         p->height = FLT2FIX(2);
    4009         270 :         p->radius = FLT2FIX(1);
    4010         270 :         p->side = 1;
    4011         270 :         p->top = 1;
    4012         270 :         return (GF_Node *)p;
    4013         270 : }
    4014             : 
    4015             : 
    4016             : /*
    4017             :         CylinderSensor Node deletion
    4018             : */
    4019             : 
    4020             : static void CylinderSensor_Del(GF_Node *node)
    4021             : {
    4022          36 :         M_CylinderSensor *p = (M_CylinderSensor *) node;
    4023          18 :         gf_node_free((GF_Node *) p);
    4024          18 : }
    4025             : 
    4026             : static const u16 CylinderSensor_Def2All[] = { 0, 1, 2, 3, 4, 5};
    4027             : static const u16 CylinderSensor_In2All[] = { 0, 1, 2, 3, 4, 5};
    4028             : static const u16 CylinderSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    4029             : 
    4030             : static u32 CylinderSensor_get_field_count(GF_Node *node, u8 IndexMode)
    4031             : {
    4032         104 :         switch(IndexMode) {
    4033             :         case GF_SG_FIELD_CODING_IN:
    4034           0 :                 return 6;
    4035             :         case GF_SG_FIELD_CODING_DEF:
    4036           9 :                 return 6;
    4037             :         case GF_SG_FIELD_CODING_OUT:
    4038          36 :                 return 9;
    4039             :         case GF_SG_FIELD_CODING_DYN:
    4040           0 :                 return 0;
    4041             :         default:
    4042           7 :                 return 9;
    4043             :         }
    4044          52 : }
    4045             : 
    4046             : static GF_Err CylinderSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4047             : {
    4048         188 :         switch(IndexMode) {
    4049             :         case GF_SG_FIELD_CODING_IN:
    4050           0 :                 *allField = CylinderSensor_In2All[inField];
    4051           0 :                 return GF_OK;
    4052             :         case GF_SG_FIELD_CODING_DEF:
    4053          12 :                 *allField = CylinderSensor_Def2All[inField];
    4054          12 :                 return GF_OK;
    4055             :         case GF_SG_FIELD_CODING_OUT:
    4056          82 :                 *allField = CylinderSensor_Out2All[inField];
    4057          82 :                 return GF_OK;
    4058             :         default:
    4059           0 :                 return GF_BAD_PARAM;
    4060             :         }
    4061          94 : }
    4062             : static GF_Err CylinderSensor_get_field(GF_Node *node, GF_FieldInfo *info)
    4063             : {
    4064         322 :         switch (info->fieldIndex) {
    4065             :         case 0:
    4066          18 :                 info->name = "autoOffset";
    4067          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4068          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4069          18 :                 info->far_ptr = & ((M_CylinderSensor *) node)->autoOffset;
    4070          18 :                 return GF_OK;
    4071             :         case 1:
    4072          18 :                 info->name = "diskAngle";
    4073          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4074          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4075          18 :                 info->far_ptr = & ((M_CylinderSensor *) node)->diskAngle;
    4076          18 :                 return GF_OK;
    4077             :         case 2:
    4078          18 :                 info->name = "enabled";
    4079          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4080          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4081          18 :                 info->far_ptr = & ((M_CylinderSensor *) node)->enabled;
    4082          18 :                 return GF_OK;
    4083             :         case 3:
    4084          18 :                 info->name = "maxAngle";
    4085          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4086          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4087          18 :                 info->far_ptr = & ((M_CylinderSensor *) node)->maxAngle;
    4088          18 :                 return GF_OK;
    4089             :         case 4:
    4090          18 :                 info->name = "minAngle";
    4091          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4092          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4093          18 :                 info->far_ptr = & ((M_CylinderSensor *) node)->minAngle;
    4094          18 :                 return GF_OK;
    4095             :         case 5:
    4096          18 :                 info->name = "offset";
    4097          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4098          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4099          18 :                 info->far_ptr = & ((M_CylinderSensor *) node)->offset;
    4100          18 :                 return GF_OK;
    4101             :         case 6:
    4102          23 :                 info->name = "isActive";
    4103          23 :                 info->eventType = GF_SG_EVENT_OUT;
    4104          23 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4105          23 :                 info->far_ptr = & ((M_CylinderSensor *) node)->isActive;
    4106          23 :                 return GF_OK;
    4107             :         case 7:
    4108          15 :                 info->name = "rotation_changed";
    4109          15 :                 info->eventType = GF_SG_EVENT_OUT;
    4110          15 :                 info->fieldType = GF_SG_VRML_SFROTATION;
    4111          15 :                 info->far_ptr = & ((M_CylinderSensor *) node)->rotation_changed;
    4112          15 :                 return GF_OK;
    4113             :         case 8:
    4114          15 :                 info->name = "trackPoint_changed";
    4115          15 :                 info->eventType = GF_SG_EVENT_OUT;
    4116          15 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    4117          15 :                 info->far_ptr = & ((M_CylinderSensor *) node)->trackPoint_changed;
    4118          15 :                 return GF_OK;
    4119             :         default:
    4120           0 :                 return GF_BAD_PARAM;
    4121             :         }
    4122         161 : }
    4123             : 
    4124             : 
    4125             : static s32 CylinderSensor_get_field_index_by_name(char *name)
    4126             : {
    4127          32 :         if (!strcmp("autoOffset", name)) return 0;
    4128          16 :         if (!strcmp("diskAngle", name)) return 1;
    4129          16 :         if (!strcmp("enabled", name)) return 2;
    4130          16 :         if (!strcmp("maxAngle", name)) return 3;
    4131          16 :         if (!strcmp("minAngle", name)) return 4;
    4132          16 :         if (!strcmp("offset", name)) return 5;
    4133          24 :         if (!strcmp("isActive", name)) return 6;
    4134          12 :         if (!strcmp("rotation_changed", name)) return 7;
    4135           8 :         if (!strcmp("trackPoint_changed", name)) return 8;
    4136           0 :         return -1;
    4137          16 : }
    4138             : static Bool CylinderSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4139             : {
    4140           0 :         switch (FieldIndex) {
    4141             :         case 1:
    4142           0 :                 *AType = 0;
    4143           0 :                 *QType = 6;
    4144           0 :                 *b_min = FLT2FIX(0);
    4145           0 :                 *b_max = FLT2FIX(1.5707963);
    4146           0 :                 return 1;
    4147             :         case 3:
    4148           0 :                 *AType = 0;
    4149           0 :                 *QType = 6;
    4150           0 :                 *b_min = FLT2FIX(-6.2831853);
    4151           0 :                 *b_max = FLT2FIX(6.2831853);
    4152           0 :                 return 1;
    4153             :         case 4:
    4154           0 :                 *AType = 0;
    4155           0 :                 *QType = 6;
    4156           0 :                 *b_min = FLT2FIX(-6.2831853);
    4157           0 :                 *b_max = FLT2FIX(6.2831853);
    4158           0 :                 return 1;
    4159             :         case 5:
    4160           0 :                 *AType = 0;
    4161           0 :                 *QType = 6;
    4162           0 :                 *b_min = FLT2FIX(0);
    4163           0 :                 *b_max = FLT2FIX(6.2831853);
    4164           0 :                 return 1;
    4165             :         default:
    4166           0 :                 return 0;
    4167             :         }
    4168           0 : }
    4169             : 
    4170             : 
    4171             : 
    4172             : GF_Node *CylinderSensor_Create()
    4173             : {
    4174             :         M_CylinderSensor *p;
    4175          54 :         GF_SAFEALLOC(p, M_CylinderSensor);
    4176          18 :         if(!p) return NULL;
    4177          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CylinderSensor);
    4178             : 
    4179             :         /*default field values*/
    4180          18 :         p->autoOffset = 1;
    4181          18 :         p->diskAngle = FLT2FIX(0.262);
    4182          18 :         p->enabled = 1;
    4183          18 :         p->maxAngle = FLT2FIX(-1);
    4184          18 :         p->minAngle = FLT2FIX(0);
    4185          18 :         p->offset = FLT2FIX(0);
    4186          18 :         return (GF_Node *)p;
    4187          18 : }
    4188             : 
    4189             : 
    4190             : /*
    4191             :         DirectionalLight Node deletion
    4192             : */
    4193             : 
    4194             : static void DirectionalLight_Del(GF_Node *node)
    4195             : {
    4196         180 :         M_DirectionalLight *p = (M_DirectionalLight *) node;
    4197          90 :         gf_node_free((GF_Node *) p);
    4198          90 : }
    4199             : 
    4200             : static const u16 DirectionalLight_Def2All[] = { 0, 1, 2, 3, 4};
    4201             : static const u16 DirectionalLight_In2All[] = { 0, 1, 2, 3, 4};
    4202             : static const u16 DirectionalLight_Out2All[] = { 0, 1, 2, 3, 4};
    4203             : static const u16 DirectionalLight_Dyn2All[] = { 0, 1, 2, 3};
    4204             : 
    4205             : static u32 DirectionalLight_get_field_count(GF_Node *node, u8 IndexMode)
    4206             : {
    4207         178 :         switch(IndexMode) {
    4208             :         case GF_SG_FIELD_CODING_IN:
    4209           9 :                 return 5;
    4210             :         case GF_SG_FIELD_CODING_DEF:
    4211          45 :                 return 5;
    4212             :         case GF_SG_FIELD_CODING_OUT:
    4213           0 :                 return 5;
    4214             :         case GF_SG_FIELD_CODING_DYN:
    4215           0 :                 return 4;
    4216             :         default:
    4217          35 :                 return 5;
    4218             :         }
    4219          89 : }
    4220             : 
    4221             : static GF_Err DirectionalLight_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4222             : {
    4223         182 :         switch(IndexMode) {
    4224             :         case GF_SG_FIELD_CODING_IN:
    4225          11 :                 *allField = DirectionalLight_In2All[inField];
    4226          11 :                 return GF_OK;
    4227             :         case GF_SG_FIELD_CODING_DEF:
    4228          80 :                 *allField = DirectionalLight_Def2All[inField];
    4229          80 :                 return GF_OK;
    4230             :         case GF_SG_FIELD_CODING_OUT:
    4231           0 :                 *allField = DirectionalLight_Out2All[inField];
    4232           0 :                 return GF_OK;
    4233             :         case GF_SG_FIELD_CODING_DYN:
    4234           0 :                 *allField = DirectionalLight_Dyn2All[inField];
    4235           0 :                 return GF_OK;
    4236             :         default:
    4237           0 :                 return GF_BAD_PARAM;
    4238             :         }
    4239          91 : }
    4240             : static GF_Err DirectionalLight_get_field(GF_Node *node, GF_FieldInfo *info)
    4241             : {
    4242        1104 :         switch (info->fieldIndex) {
    4243             :         case 0:
    4244          90 :                 info->name = "ambientIntensity";
    4245          90 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4246          90 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4247          90 :                 info->far_ptr = & ((M_DirectionalLight *) node)->ambientIntensity;
    4248          90 :                 return GF_OK;
    4249             :         case 1:
    4250         137 :                 info->name = "color";
    4251         137 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4252         137 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    4253         137 :                 info->far_ptr = & ((M_DirectionalLight *) node)->color;
    4254         137 :                 return GF_OK;
    4255             :         case 2:
    4256         145 :                 info->name = "direction";
    4257         145 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4258         145 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    4259         145 :                 info->far_ptr = & ((M_DirectionalLight *) node)->direction;
    4260         145 :                 return GF_OK;
    4261             :         case 3:
    4262          90 :                 info->name = "intensity";
    4263          90 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4264          90 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4265          90 :                 info->far_ptr = & ((M_DirectionalLight *) node)->intensity;
    4266          90 :                 return GF_OK;
    4267             :         case 4:
    4268          90 :                 info->name = "on";
    4269          90 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4270          90 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4271          90 :                 info->far_ptr = & ((M_DirectionalLight *) node)->on;
    4272          90 :                 return GF_OK;
    4273             :         default:
    4274           0 :                 return GF_BAD_PARAM;
    4275             :         }
    4276         552 : }
    4277             : 
    4278             : 
    4279             : static s32 DirectionalLight_get_field_index_by_name(char *name)
    4280             : {
    4281          64 :         if (!strcmp("ambientIntensity", name)) return 0;
    4282          46 :         if (!strcmp("color", name)) return 1;
    4283          36 :         if (!strcmp("direction", name)) return 2;
    4284           0 :         if (!strcmp("intensity", name)) return 3;
    4285           0 :         if (!strcmp("on", name)) return 4;
    4286           0 :         return -1;
    4287          32 : }
    4288             : static Bool DirectionalLight_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4289             : {
    4290           0 :         switch (FieldIndex) {
    4291             :         case 0:
    4292           0 :                 *AType = 8;
    4293           0 :                 *QType = 4;
    4294           0 :                 *b_min = FLT2FIX(0);
    4295           0 :                 *b_max = FLT2FIX(1);
    4296           0 :                 return 1;
    4297             :         case 1:
    4298           0 :                 *AType = 4;
    4299           0 :                 *QType = 4;
    4300           0 :                 *b_min = FLT2FIX(0);
    4301           0 :                 *b_max = FLT2FIX(1);
    4302           0 :                 return 1;
    4303             :         case 2:
    4304           0 :                 *AType = 9;
    4305           0 :                 *QType = 9;
    4306           0 :                 return 1;
    4307             :         case 3:
    4308           0 :                 *AType = 8;
    4309           0 :                 *QType = 4;
    4310           0 :                 *b_min = FLT2FIX(0);
    4311           0 :                 *b_max = FLT2FIX(1);
    4312           0 :                 return 1;
    4313             :         default:
    4314           0 :                 return 0;
    4315             :         }
    4316           0 : }
    4317             : 
    4318             : 
    4319             : 
    4320             : GF_Node *DirectionalLight_Create()
    4321             : {
    4322             :         M_DirectionalLight *p;
    4323         270 :         GF_SAFEALLOC(p, M_DirectionalLight);
    4324          90 :         if(!p) return NULL;
    4325          90 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DirectionalLight);
    4326             : 
    4327             :         /*default field values*/
    4328          90 :         p->ambientIntensity = FLT2FIX(0);
    4329          90 :         p->color.red = FLT2FIX(1);
    4330          90 :         p->color.green = FLT2FIX(1);
    4331          90 :         p->color.blue = FLT2FIX(1);
    4332          90 :         p->direction.x = FLT2FIX(0);
    4333          90 :         p->direction.y = FLT2FIX(0);
    4334          90 :         p->direction.z = FLT2FIX(-1);
    4335          90 :         p->intensity = FLT2FIX(1);
    4336          90 :         p->on = 1;
    4337          90 :         return (GF_Node *)p;
    4338          90 : }
    4339             : 
    4340             : 
    4341             : /*
    4342             :         DiscSensor Node deletion
    4343             : */
    4344             : 
    4345             : static void DiscSensor_Del(GF_Node *node)
    4346             : {
    4347         108 :         M_DiscSensor *p = (M_DiscSensor *) node;
    4348          54 :         gf_node_free((GF_Node *) p);
    4349          54 : }
    4350             : 
    4351             : static const u16 DiscSensor_Def2All[] = { 0, 1, 2, 3, 4};
    4352             : static const u16 DiscSensor_In2All[] = { 0, 1, 2, 3, 4};
    4353             : static const u16 DiscSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
    4354             : 
    4355             : static u32 DiscSensor_get_field_count(GF_Node *node, u8 IndexMode)
    4356             : {
    4357         150 :         switch(IndexMode) {
    4358             :         case GF_SG_FIELD_CODING_IN:
    4359           0 :                 return 5;
    4360             :         case GF_SG_FIELD_CODING_DEF:
    4361          27 :                 return 5;
    4362             :         case GF_SG_FIELD_CODING_OUT:
    4363          27 :                 return 8;
    4364             :         case GF_SG_FIELD_CODING_DYN:
    4365           0 :                 return 0;
    4366             :         default:
    4367          21 :                 return 8;
    4368             :         }
    4369          75 : }
    4370             : 
    4371             : static GF_Err DiscSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4372             : {
    4373         184 :         switch(IndexMode) {
    4374             :         case GF_SG_FIELD_CODING_IN:
    4375           0 :                 *allField = DiscSensor_In2All[inField];
    4376           0 :                 return GF_OK;
    4377             :         case GF_SG_FIELD_CODING_DEF:
    4378          35 :                 *allField = DiscSensor_Def2All[inField];
    4379          35 :                 return GF_OK;
    4380             :         case GF_SG_FIELD_CODING_OUT:
    4381          57 :                 *allField = DiscSensor_Out2All[inField];
    4382          57 :                 return GF_OK;
    4383             :         default:
    4384           0 :                 return GF_BAD_PARAM;
    4385             :         }
    4386          92 : }
    4387             : static GF_Err DiscSensor_get_field(GF_Node *node, GF_FieldInfo *info)
    4388             : {
    4389         744 :         switch (info->fieldIndex) {
    4390             :         case 0:
    4391          69 :                 info->name = "autoOffset";
    4392          69 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4393          69 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4394          69 :                 info->far_ptr = & ((M_DiscSensor *) node)->autoOffset;
    4395          69 :                 return GF_OK;
    4396             :         case 1:
    4397          54 :                 info->name = "enabled";
    4398          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4399          54 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4400          54 :                 info->far_ptr = & ((M_DiscSensor *) node)->enabled;
    4401          54 :                 return GF_OK;
    4402             :         case 2:
    4403          54 :                 info->name = "maxAngle";
    4404          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4405          54 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4406          54 :                 info->far_ptr = & ((M_DiscSensor *) node)->maxAngle;
    4407          54 :                 return GF_OK;
    4408             :         case 3:
    4409          54 :                 info->name = "minAngle";
    4410          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4411          54 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4412          54 :                 info->far_ptr = & ((M_DiscSensor *) node)->minAngle;
    4413          54 :                 return GF_OK;
    4414             :         case 4:
    4415          54 :                 info->name = "offset";
    4416          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4417          54 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4418          54 :                 info->far_ptr = & ((M_DiscSensor *) node)->offset;
    4419          54 :                 return GF_OK;
    4420             :         case 5:
    4421          21 :                 info->name = "isActive";
    4422          21 :                 info->eventType = GF_SG_EVENT_OUT;
    4423          21 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4424          21 :                 info->far_ptr = & ((M_DiscSensor *) node)->isActive;
    4425          21 :                 return GF_OK;
    4426             :         case 6:
    4427          45 :                 info->name = "rotation_changed";
    4428          45 :                 info->eventType = GF_SG_EVENT_OUT;
    4429          45 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4430          45 :                 info->far_ptr = & ((M_DiscSensor *) node)->rotation_changed;
    4431          45 :                 return GF_OK;
    4432             :         case 7:
    4433          21 :                 info->name = "trackPoint_changed";
    4434          21 :                 info->eventType = GF_SG_EVENT_OUT;
    4435          21 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    4436          21 :                 info->far_ptr = & ((M_DiscSensor *) node)->trackPoint_changed;
    4437          21 :                 return GF_OK;
    4438             :         default:
    4439           0 :                 return GF_BAD_PARAM;
    4440             :         }
    4441         372 : }
    4442             : 
    4443             : 
    4444             : static s32 DiscSensor_get_field_index_by_name(char *name)
    4445             : {
    4446          36 :         if (!strcmp("autoOffset", name)) return 0;
    4447          12 :         if (!strcmp("enabled", name)) return 1;
    4448          12 :         if (!strcmp("maxAngle", name)) return 2;
    4449          12 :         if (!strcmp("minAngle", name)) return 3;
    4450          12 :         if (!strcmp("offset", name)) return 4;
    4451          12 :         if (!strcmp("isActive", name)) return 5;
    4452          24 :         if (!strcmp("rotation_changed", name)) return 6;
    4453           0 :         if (!strcmp("trackPoint_changed", name)) return 7;
    4454           0 :         return -1;
    4455          16 : }
    4456             : static Bool DiscSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4457             : {
    4458           0 :         switch (FieldIndex) {
    4459             :         case 2:
    4460           0 :                 *AType = 0;
    4461           0 :                 *QType = 6;
    4462           0 :                 *b_min = FLT2FIX(-6.2831853);
    4463           0 :                 *b_max = FLT2FIX(6.2831853);
    4464           0 :                 return 1;
    4465             :         case 3:
    4466           0 :                 *AType = 0;
    4467           0 :                 *QType = 6;
    4468           0 :                 *b_min = FLT2FIX(-6.2831853);
    4469           0 :                 *b_max = FLT2FIX(6.2831853);
    4470           0 :                 return 1;
    4471             :         case 4:
    4472           0 :                 *AType = 0;
    4473           0 :                 *QType = 6;
    4474           0 :                 *b_min = FLT2FIX(0);
    4475           0 :                 *b_max = FLT2FIX(6.2831853);
    4476           0 :                 return 1;
    4477             :         default:
    4478           0 :                 return 0;
    4479             :         }
    4480           0 : }
    4481             : 
    4482             : 
    4483             : 
    4484             : GF_Node *DiscSensor_Create()
    4485             : {
    4486             :         M_DiscSensor *p;
    4487         162 :         GF_SAFEALLOC(p, M_DiscSensor);
    4488          54 :         if(!p) return NULL;
    4489          54 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DiscSensor);
    4490             : 
    4491             :         /*default field values*/
    4492          54 :         p->autoOffset = 1;
    4493          54 :         p->enabled = 1;
    4494          54 :         p->maxAngle = FLT2FIX(-1);
    4495          54 :         p->minAngle = FLT2FIX(0);
    4496          54 :         p->offset = FLT2FIX(0);
    4497          54 :         return (GF_Node *)p;
    4498          54 : }
    4499             : 
    4500             : 
    4501             : /*
    4502             :         ElevationGrid Node deletion
    4503             : */
    4504             : 
    4505             : static void ElevationGrid_Del(GF_Node *node)
    4506             : {
    4507          36 :         M_ElevationGrid *p = (M_ElevationGrid *) node;
    4508          18 :         gf_sg_mffloat_del(p->set_height);
    4509          18 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    4510          18 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
    4511          18 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
    4512          18 :         gf_sg_mffloat_del(p->height);
    4513          18 :         gf_node_free((GF_Node *) p);
    4514          18 : }
    4515             : 
    4516             : static const u16 ElevationGrid_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    4517             : static const u16 ElevationGrid_In2All[] = { 0, 1, 2, 3};
    4518             : static const u16 ElevationGrid_Out2All[] = { 1, 2, 3};
    4519             : 
    4520             : static u32 ElevationGrid_get_field_count(GF_Node *node, u8 IndexMode)
    4521             : {
    4522          32 :         switch(IndexMode) {
    4523             :         case GF_SG_FIELD_CODING_IN:
    4524           0 :                 return 4;
    4525             :         case GF_SG_FIELD_CODING_DEF:
    4526           9 :                 return 13;
    4527             :         case GF_SG_FIELD_CODING_OUT:
    4528           0 :                 return 3;
    4529             :         case GF_SG_FIELD_CODING_DYN:
    4530           0 :                 return 0;
    4531             :         default:
    4532           7 :                 return 14;
    4533             :         }
    4534          16 : }
    4535             : 
    4536             : static GF_Err ElevationGrid_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4537             : {
    4538         112 :         switch(IndexMode) {
    4539             :         case GF_SG_FIELD_CODING_IN:
    4540           0 :                 *allField = ElevationGrid_In2All[inField];
    4541           0 :                 return GF_OK;
    4542             :         case GF_SG_FIELD_CODING_DEF:
    4543          56 :                 *allField = ElevationGrid_Def2All[inField];
    4544          56 :                 return GF_OK;
    4545             :         case GF_SG_FIELD_CODING_OUT:
    4546           0 :                 *allField = ElevationGrid_Out2All[inField];
    4547           0 :                 return GF_OK;
    4548             :         default:
    4549           0 :                 return GF_BAD_PARAM;
    4550             :         }
    4551          56 : }
    4552             : static GF_Err ElevationGrid_get_field(GF_Node *node, GF_FieldInfo *info)
    4553             : {
    4554         608 :         switch (info->fieldIndex) {
    4555             :         case 0:
    4556           7 :                 info->name = "set_height";
    4557           7 :                 info->eventType = GF_SG_EVENT_IN;
    4558           7 :                 info->on_event_in = ((M_ElevationGrid *)node)->on_set_height;
    4559           7 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    4560           7 :                 info->far_ptr = & ((M_ElevationGrid *) node)->set_height;
    4561           7 :                 return GF_OK;
    4562             :         case 1:
    4563           9 :                 info->name = "color";
    4564           9 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4565           9 :                 info->fieldType = GF_SG_VRML_SFNODE;
    4566           9 :                 info->NDTtype = NDT_SFColorNode;
    4567           9 :                 info->far_ptr = & ((M_ElevationGrid *)node)->color;
    4568           9 :                 return GF_OK;
    4569             :         case 2:
    4570           9 :                 info->name = "normal";
    4571           9 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4572           9 :                 info->fieldType = GF_SG_VRML_SFNODE;
    4573           9 :                 info->NDTtype = NDT_SFNormalNode;
    4574           9 :                 info->far_ptr = & ((M_ElevationGrid *)node)->normal;
    4575           9 :                 return GF_OK;
    4576             :         case 3:
    4577           9 :                 info->name = "texCoord";
    4578           9 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4579           9 :                 info->fieldType = GF_SG_VRML_SFNODE;
    4580           9 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
    4581           9 :                 info->far_ptr = & ((M_ElevationGrid *)node)->texCoord;
    4582           9 :                 return GF_OK;
    4583             :         case 4:
    4584          33 :                 info->name = "height";
    4585          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    4586          33 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    4587          33 :                 info->far_ptr = & ((M_ElevationGrid *) node)->height;
    4588          33 :                 return GF_OK;
    4589             :         case 5:
    4590          18 :                 info->name = "ccw";
    4591          18 :                 info->eventType = GF_SG_EVENT_FIELD;
    4592          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4593          18 :                 info->far_ptr = & ((M_ElevationGrid *) node)->ccw;
    4594          18 :                 return GF_OK;
    4595             :         case 6:
    4596          18 :                 info->name = "colorPerVertex";
    4597          18 :                 info->eventType = GF_SG_EVENT_FIELD;
    4598          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4599          18 :                 info->far_ptr = & ((M_ElevationGrid *) node)->colorPerVertex;
    4600          18 :                 return GF_OK;
    4601             :         case 7:
    4602          33 :                 info->name = "creaseAngle";
    4603          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    4604          33 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4605          33 :                 info->far_ptr = & ((M_ElevationGrid *) node)->creaseAngle;
    4606          33 :                 return GF_OK;
    4607             :         case 8:
    4608          18 :                 info->name = "normalPerVertex";
    4609          18 :                 info->eventType = GF_SG_EVENT_FIELD;
    4610          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4611          18 :                 info->far_ptr = & ((M_ElevationGrid *) node)->normalPerVertex;
    4612          18 :                 return GF_OK;
    4613             :         case 9:
    4614          18 :                 info->name = "solid";
    4615          18 :                 info->eventType = GF_SG_EVENT_FIELD;
    4616          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4617          18 :                 info->far_ptr = & ((M_ElevationGrid *) node)->solid;
    4618          18 :                 return GF_OK;
    4619             :         case 10:
    4620          33 :                 info->name = "xDimension";
    4621          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    4622          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4623          33 :                 info->far_ptr = & ((M_ElevationGrid *) node)->xDimension;
    4624          33 :                 return GF_OK;
    4625             :         case 11:
    4626          33 :                 info->name = "xSpacing";
    4627          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    4628          33 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4629          33 :                 info->far_ptr = & ((M_ElevationGrid *) node)->xSpacing;
    4630          33 :                 return GF_OK;
    4631             :         case 12:
    4632          33 :                 info->name = "zDimension";
    4633          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    4634          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4635          33 :                 info->far_ptr = & ((M_ElevationGrid *) node)->zDimension;
    4636          33 :                 return GF_OK;
    4637             :         case 13:
    4638          33 :                 info->name = "zSpacing";
    4639          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    4640          33 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4641          33 :                 info->far_ptr = & ((M_ElevationGrid *) node)->zSpacing;
    4642          33 :                 return GF_OK;
    4643             :         default:
    4644           0 :                 return GF_BAD_PARAM;
    4645             :         }
    4646         304 : }
    4647             : 
    4648             : 
    4649             : static s32 ElevationGrid_get_field_index_by_name(char *name)
    4650             : {
    4651          48 :         if (!strcmp("set_height", name)) return 0;
    4652          24 :         if (!strcmp("color", name)) return 1;
    4653          24 :         if (!strcmp("normal", name)) return 2;
    4654          24 :         if (!strcmp("texCoord", name)) return 3;
    4655          28 :         if (!strcmp("height", name)) return 4;
    4656          20 :         if (!strcmp("ccw", name)) return 5;
    4657          20 :         if (!strcmp("colorPerVertex", name)) return 6;
    4658          24 :         if (!strcmp("creaseAngle", name)) return 7;
    4659          16 :         if (!strcmp("normalPerVertex", name)) return 8;
    4660          16 :         if (!strcmp("solid", name)) return 9;
    4661          20 :         if (!strcmp("xDimension", name)) return 10;
    4662          16 :         if (!strcmp("xSpacing", name)) return 11;
    4663          12 :         if (!strcmp("zDimension", name)) return 12;
    4664           8 :         if (!strcmp("zSpacing", name)) return 13;
    4665           0 :         return -1;
    4666          24 : }
    4667             : static Bool ElevationGrid_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4668             : {
    4669           0 :         switch (FieldIndex) {
    4670             :         case 4:
    4671           0 :                 *AType = 7;
    4672           0 :                 *QType = 11;
    4673           0 :                 *b_min = FIX_MIN;
    4674           0 :                 *b_max = FIX_MAX;
    4675           0 :                 return 1;
    4676             :         case 7:
    4677           0 :                 *AType = 0;
    4678           0 :                 *QType = 6;
    4679           0 :                 *b_min = FLT2FIX(0);
    4680           0 :                 *b_max = FLT2FIX(6.2831853);
    4681           0 :                 return 1;
    4682             :         case 10:
    4683           0 :                 *AType = 0;
    4684           0 :                 *QType = 11;
    4685           0 :                 *b_min = FLT2FIX(0);
    4686           0 :                 *b_max = FIX_MAX;
    4687           0 :                 return 1;
    4688             :         case 11:
    4689           0 :                 *AType = 0;
    4690           0 :                 *QType = 11;
    4691           0 :                 *b_min = FLT2FIX(0);
    4692           0 :                 *b_max = FIX_MAX;
    4693           0 :                 return 1;
    4694             :         case 12:
    4695           0 :                 *AType = 0;
    4696           0 :                 *QType = 11;
    4697           0 :                 *b_min = FLT2FIX(0);
    4698           0 :                 *b_max = FIX_MAX;
    4699           0 :                 return 1;
    4700             :         case 13:
    4701           0 :                 *AType = 0;
    4702           0 :                 *QType = 11;
    4703           0 :                 *b_min = FLT2FIX(0);
    4704           0 :                 *b_max = FIX_MAX;
    4705           0 :                 return 1;
    4706             :         default:
    4707           0 :                 return 0;
    4708             :         }
    4709           0 : }
    4710             : 
    4711             : 
    4712             : 
    4713             : GF_Node *ElevationGrid_Create()
    4714             : {
    4715             :         M_ElevationGrid *p;
    4716          54 :         GF_SAFEALLOC(p, M_ElevationGrid);
    4717          18 :         if(!p) return NULL;
    4718          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ElevationGrid);
    4719             : 
    4720             :         /*default field values*/
    4721          18 :         p->ccw = 1;
    4722          18 :         p->colorPerVertex = 1;
    4723          18 :         p->creaseAngle = FLT2FIX(0.0);
    4724          18 :         p->normalPerVertex = 1;
    4725          18 :         p->solid = 1;
    4726          18 :         p->xDimension = 0;
    4727          18 :         p->xSpacing = FLT2FIX(1.0);
    4728          18 :         p->zDimension = 0;
    4729          18 :         p->zSpacing = FLT2FIX(1.0);
    4730          18 :         return (GF_Node *)p;
    4731          18 : }
    4732             : 
    4733             : 
    4734             : /*
    4735             :         Expression Node deletion
    4736             : */
    4737             : 
    4738             : static void Expression_Del(GF_Node *node)
    4739             : {
    4740           0 :         M_Expression *p = (M_Expression *) node;
    4741           0 :         gf_node_free((GF_Node *) p);
    4742           0 : }
    4743             : 
    4744             : static const u16 Expression_Def2All[] = { 0, 1, 2, 3, 4, 5};
    4745             : static const u16 Expression_In2All[] = { 0, 1, 2, 3, 4, 5};
    4746             : static const u16 Expression_Out2All[] = { 0, 1, 2, 3, 4, 5};
    4747             : 
    4748             : static u32 Expression_get_field_count(GF_Node *node, u8 IndexMode)
    4749             : {
    4750           0 :         switch(IndexMode) {
    4751             :         case GF_SG_FIELD_CODING_IN:
    4752           0 :                 return 6;
    4753             :         case GF_SG_FIELD_CODING_DEF:
    4754           0 :                 return 6;
    4755             :         case GF_SG_FIELD_CODING_OUT:
    4756           0 :                 return 6;
    4757             :         case GF_SG_FIELD_CODING_DYN:
    4758           0 :                 return 0;
    4759             :         default:
    4760           0 :                 return 6;
    4761             :         }
    4762           0 : }
    4763             : 
    4764             : static GF_Err Expression_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4765             : {
    4766           0 :         switch(IndexMode) {
    4767             :         case GF_SG_FIELD_CODING_IN:
    4768           0 :                 *allField = Expression_In2All[inField];
    4769           0 :                 return GF_OK;
    4770             :         case GF_SG_FIELD_CODING_DEF:
    4771           0 :                 *allField = Expression_Def2All[inField];
    4772           0 :                 return GF_OK;
    4773             :         case GF_SG_FIELD_CODING_OUT:
    4774           0 :                 *allField = Expression_Out2All[inField];
    4775           0 :                 return GF_OK;
    4776             :         default:
    4777           0 :                 return GF_BAD_PARAM;
    4778             :         }
    4779           0 : }
    4780             : static GF_Err Expression_get_field(GF_Node *node, GF_FieldInfo *info)
    4781             : {
    4782           0 :         switch (info->fieldIndex) {
    4783             :         case 0:
    4784           0 :                 info->name = "expression_select1";
    4785           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4786           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4787           0 :                 info->far_ptr = & ((M_Expression *) node)->expression_select1;
    4788           0 :                 return GF_OK;
    4789             :         case 1:
    4790           0 :                 info->name = "expression_intensity1";
    4791           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4792           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4793           0 :                 info->far_ptr = & ((M_Expression *) node)->expression_intensity1;
    4794           0 :                 return GF_OK;
    4795             :         case 2:
    4796           0 :                 info->name = "expression_select2";
    4797           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4798           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4799           0 :                 info->far_ptr = & ((M_Expression *) node)->expression_select2;
    4800           0 :                 return GF_OK;
    4801             :         case 3:
    4802           0 :                 info->name = "expression_intensity2";
    4803           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4804           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4805           0 :                 info->far_ptr = & ((M_Expression *) node)->expression_intensity2;
    4806           0 :                 return GF_OK;
    4807             :         case 4:
    4808           0 :                 info->name = "init_face";
    4809           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4810           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4811           0 :                 info->far_ptr = & ((M_Expression *) node)->init_face;
    4812           0 :                 return GF_OK;
    4813             :         case 5:
    4814           0 :                 info->name = "expression_def";
    4815           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4816           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4817           0 :                 info->far_ptr = & ((M_Expression *) node)->expression_def;
    4818           0 :                 return GF_OK;
    4819             :         default:
    4820           0 :                 return GF_BAD_PARAM;
    4821             :         }
    4822           0 : }
    4823             : 
    4824             : 
    4825             : static s32 Expression_get_field_index_by_name(char *name)
    4826             : {
    4827           0 :         if (!strcmp("expression_select1", name)) return 0;
    4828           0 :         if (!strcmp("expression_intensity1", name)) return 1;
    4829           0 :         if (!strcmp("expression_select2", name)) return 2;
    4830           0 :         if (!strcmp("expression_intensity2", name)) return 3;
    4831           0 :         if (!strcmp("init_face", name)) return 4;
    4832           0 :         if (!strcmp("expression_def", name)) return 5;
    4833           0 :         return -1;
    4834           0 : }
    4835             : static Bool Expression_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4836             : {
    4837           0 :         switch (FieldIndex) {
    4838             :         case 0:
    4839           0 :                 *AType = 0;
    4840           0 :                 *QType = 13;
    4841           0 :                 *QT13_bits = 5;
    4842           0 :                 *b_min = FLT2FIX(0);
    4843           0 :                 *b_max = FLT2FIX(31);
    4844           0 :                 return 1;
    4845             :         case 1:
    4846           0 :                 *AType = 0;
    4847           0 :                 *QType = 13;
    4848           0 :                 *QT13_bits = 6;
    4849           0 :                 *b_min = FLT2FIX(0);
    4850           0 :                 *b_max = FLT2FIX(63);
    4851           0 :                 return 1;
    4852             :         case 2:
    4853           0 :                 *AType = 0;
    4854           0 :                 *QType = 13;
    4855           0 :                 *QT13_bits = 5;
    4856           0 :                 *b_min = FLT2FIX(0);
    4857           0 :                 *b_max = FLT2FIX(31);
    4858           0 :                 return 1;
    4859             :         case 3:
    4860           0 :                 *AType = 0;
    4861           0 :                 *QType = 13;
    4862           0 :                 *QT13_bits = 6;
    4863           0 :                 *b_min = FLT2FIX(0);
    4864           0 :                 *b_max = FLT2FIX(63);
    4865           0 :                 return 1;
    4866             :         default:
    4867           0 :                 return 0;
    4868             :         }
    4869           0 : }
    4870             : 
    4871             : 
    4872             : 
    4873             : GF_Node *Expression_Create()
    4874             : {
    4875             :         M_Expression *p;
    4876           0 :         GF_SAFEALLOC(p, M_Expression);
    4877           0 :         if(!p) return NULL;
    4878           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Expression);
    4879             : 
    4880             :         /*default field values*/
    4881           0 :         p->expression_select1 = 0;
    4882           0 :         p->expression_intensity1 = 0;
    4883           0 :         p->expression_select2 = 0;
    4884           0 :         p->expression_intensity2 = 0;
    4885           0 :         return (GF_Node *)p;
    4886           0 : }
    4887             : 
    4888             : 
    4889             : /*
    4890             :         Extrusion Node deletion
    4891             : */
    4892             : 
    4893             : static void Extrusion_Del(GF_Node *node)
    4894             : {
    4895          36 :         M_Extrusion *p = (M_Extrusion *) node;
    4896          18 :         gf_sg_mfvec2f_del(p->set_crossSection);
    4897          18 :         gf_sg_mfrotation_del(p->set_orientation);
    4898          18 :         gf_sg_mfvec2f_del(p->set_scale);
    4899          18 :         gf_sg_mfvec3f_del(p->set_spine);
    4900          18 :         gf_sg_mfvec2f_del(p->crossSection);
    4901          18 :         gf_sg_mfrotation_del(p->orientation);
    4902          18 :         gf_sg_mfvec2f_del(p->scale);
    4903          18 :         gf_sg_mfvec3f_del(p->spine);
    4904          18 :         gf_node_free((GF_Node *) p);
    4905          18 : }
    4906             : 
    4907             : static const u16 Extrusion_Def2All[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    4908             : static const u16 Extrusion_In2All[] = { 0, 1, 2, 3};
    4909             : 
    4910             : static u32 Extrusion_get_field_count(GF_Node *node, u8 IndexMode)
    4911             : {
    4912          32 :         switch(IndexMode) {
    4913             :         case GF_SG_FIELD_CODING_IN:
    4914           0 :                 return 4;
    4915             :         case GF_SG_FIELD_CODING_DEF:
    4916           9 :                 return 10;
    4917             :         case GF_SG_FIELD_CODING_OUT:
    4918           0 :                 return 0;
    4919             :         case GF_SG_FIELD_CODING_DYN:
    4920           0 :                 return 0;
    4921             :         default:
    4922           7 :                 return 14;
    4923             :         }
    4924          16 : }
    4925             : 
    4926             : static GF_Err Extrusion_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4927             : {
    4928         100 :         switch(IndexMode) {
    4929             :         case GF_SG_FIELD_CODING_IN:
    4930           0 :                 *allField = Extrusion_In2All[inField];
    4931           0 :                 return GF_OK;
    4932             :         case GF_SG_FIELD_CODING_DEF:
    4933          50 :                 *allField = Extrusion_Def2All[inField];
    4934          50 :                 return GF_OK;
    4935             :         default:
    4936           0 :                 return GF_BAD_PARAM;
    4937             :         }
    4938          50 : }
    4939             : static GF_Err Extrusion_get_field(GF_Node *node, GF_FieldInfo *info)
    4940             : {
    4941         600 :         switch (info->fieldIndex) {
    4942             :         case 0:
    4943           7 :                 info->name = "set_crossSection";
    4944           7 :                 info->eventType = GF_SG_EVENT_IN;
    4945           7 :                 info->on_event_in = ((M_Extrusion *)node)->on_set_crossSection;
    4946           7 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    4947           7 :                 info->far_ptr = & ((M_Extrusion *) node)->set_crossSection;
    4948           7 :                 return GF_OK;
    4949             :         case 1:
    4950           7 :                 info->name = "set_orientation";
    4951           7 :                 info->eventType = GF_SG_EVENT_IN;
    4952           7 :                 info->on_event_in = ((M_Extrusion *)node)->on_set_orientation;
    4953           7 :                 info->fieldType = GF_SG_VRML_MFROTATION;
    4954           7 :                 info->far_ptr = & ((M_Extrusion *) node)->set_orientation;
    4955           7 :                 return GF_OK;
    4956             :         case 2:
    4957           7 :                 info->name = "set_scale";
    4958           7 :                 info->eventType = GF_SG_EVENT_IN;
    4959           7 :                 info->on_event_in = ((M_Extrusion *)node)->on_set_scale;
    4960           7 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    4961           7 :                 info->far_ptr = & ((M_Extrusion *) node)->set_scale;
    4962           7 :                 return GF_OK;
    4963             :         case 3:
    4964           7 :                 info->name = "set_spine";
    4965           7 :                 info->eventType = GF_SG_EVENT_IN;
    4966           7 :                 info->on_event_in = ((M_Extrusion *)node)->on_set_spine;
    4967           7 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    4968           7 :                 info->far_ptr = & ((M_Extrusion *) node)->set_spine;
    4969           7 :                 return GF_OK;
    4970             :         case 4:
    4971          20 :                 info->name = "beginCap";
    4972          20 :                 info->eventType = GF_SG_EVENT_FIELD;
    4973          20 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4974          20 :                 info->far_ptr = & ((M_Extrusion *) node)->beginCap;
    4975          20 :                 return GF_OK;
    4976             :         case 5:
    4977          18 :                 info->name = "ccw";
    4978          18 :                 info->eventType = GF_SG_EVENT_FIELD;
    4979          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4980          18 :                 info->far_ptr = & ((M_Extrusion *) node)->ccw;
    4981          18 :                 return GF_OK;
    4982             :         case 6:
    4983          18 :                 info->name = "convex";
    4984          18 :                 info->eventType = GF_SG_EVENT_FIELD;
    4985          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4986          18 :                 info->far_ptr = & ((M_Extrusion *) node)->convex;
    4987          18 :                 return GF_OK;
    4988             :         case 7:
    4989          33 :                 info->name = "creaseAngle";
    4990          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    4991          33 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4992          33 :                 info->far_ptr = & ((M_Extrusion *) node)->creaseAngle;
    4993          33 :                 return GF_OK;
    4994             :         case 8:
    4995          33 :                 info->name = "crossSection";
    4996          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    4997          33 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    4998          33 :                 info->far_ptr = & ((M_Extrusion *) node)->crossSection;
    4999          33 :                 return GF_OK;
    5000             :         case 9:
    5001          33 :                 info->name = "endCap";
    5002          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    5003          33 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    5004          33 :                 info->far_ptr = & ((M_Extrusion *) node)->endCap;
    5005          33 :                 return GF_OK;
    5006             :         case 10:
    5007          18 :                 info->name = "orientation";
    5008          18 :                 info->eventType = GF_SG_EVENT_FIELD;
    5009          18 :                 info->fieldType = GF_SG_VRML_MFROTATION;
    5010          18 :                 info->far_ptr = & ((M_Extrusion *) node)->orientation;
    5011          18 :                 return GF_OK;
    5012             :         case 11:
    5013          33 :                 info->name = "scale";
    5014          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    5015          33 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    5016          33 :                 info->far_ptr = & ((M_Extrusion *) node)->scale;
    5017          33 :                 return GF_OK;
    5018             :         case 12:
    5019          33 :                 info->name = "solid";
    5020          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    5021          33 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    5022          33 :                 info->far_ptr = & ((M_Extrusion *) node)->solid;
    5023          33 :                 return GF_OK;
    5024             :         case 13:
    5025          33 :                 info->name = "spine";
    5026          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    5027          33 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    5028          33 :                 info->far_ptr = & ((M_Extrusion *) node)->spine;
    5029          33 :                 return GF_OK;
    5030             :         default:
    5031           0 :                 return GF_BAD_PARAM;
    5032             :         }
    5033         300 : }
    5034             : 
    5035             : 
    5036             : static s32 Extrusion_get_field_index_by_name(char *name)
    5037             : {
    5038          52 :         if (!strcmp("set_crossSection", name)) return 0;
    5039          26 :         if (!strcmp("set_orientation", name)) return 1;
    5040          26 :         if (!strcmp("set_scale", name)) return 2;
    5041          26 :         if (!strcmp("set_spine", name)) return 3;
    5042          28 :         if (!strcmp("beginCap", name)) return 4;
    5043          24 :         if (!strcmp("ccw", name)) return 5;
    5044          24 :         if (!strcmp("convex", name)) return 6;
    5045          28 :         if (!strcmp("creaseAngle", name)) return 7;
    5046          24 :         if (!strcmp("crossSection", name)) return 8;
    5047          20 :         if (!strcmp("endCap", name)) return 9;
    5048          12 :         if (!strcmp("orientation", name)) return 10;
    5049          16 :         if (!strcmp("scale", name)) return 11;
    5050          12 :         if (!strcmp("solid", name)) return 12;
    5051           8 :         if (!strcmp("spine", name)) return 13;
    5052           0 :         return -1;
    5053          26 : }
    5054             : static Bool Extrusion_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5055             : {
    5056           0 :         switch (FieldIndex) {
    5057             :         case 7:
    5058           0 :                 *AType = 0;
    5059           0 :                 *QType = 6;
    5060           0 :                 *b_min = FLT2FIX(0);
    5061           0 :                 *b_max = FLT2FIX(6.2831853);
    5062           0 :                 return 1;
    5063             :         case 8:
    5064           0 :                 *AType = 0;
    5065           0 :                 *QType = 2;
    5066           0 :                 *b_min = FIX_MIN;
    5067           0 :                 *b_max = FIX_MAX;
    5068           0 :                 return 1;
    5069             :         case 10:
    5070           0 :                 *AType = 0;
    5071           0 :                 *QType = 10;
    5072           0 :                 *b_min = FIX_MIN;
    5073           0 :                 *b_max = FIX_MAX;
    5074           0 :                 return 1;
    5075             :         case 11:
    5076           0 :                 *AType = 0;
    5077           0 :                 *QType = 7;
    5078           0 :                 *b_min = FLT2FIX(0);
    5079           0 :                 *b_max = FIX_MAX;
    5080           0 :                 return 1;
    5081             :         case 13:
    5082           0 :                 *AType = 0;
    5083           0 :                 *QType = 1;
    5084           0 :                 *b_min = FIX_MIN;
    5085           0 :                 *b_max = FIX_MAX;
    5086           0 :                 return 1;
    5087             :         default:
    5088           0 :                 return 0;
    5089             :         }
    5090           0 : }
    5091             : 
    5092             : 
    5093             : 
    5094             : GF_Node *Extrusion_Create()
    5095             : {
    5096             :         M_Extrusion *p;
    5097          54 :         GF_SAFEALLOC(p, M_Extrusion);
    5098          18 :         if(!p) return NULL;
    5099          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Extrusion);
    5100             : 
    5101             :         /*default field values*/
    5102          18 :         p->beginCap = 1;
    5103          18 :         p->ccw = 1;
    5104          18 :         p->convex = 1;
    5105          18 :         p->creaseAngle = FLT2FIX(0.0);
    5106          18 :         p->crossSection.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*5);
    5107          18 :         p->crossSection.count = 5;
    5108          18 :         p->crossSection.vals[0].x = FLT2FIX(1);
    5109          18 :         p->crossSection.vals[0].y = FLT2FIX(1);
    5110          18 :         p->crossSection.vals[1].x = FLT2FIX(1);
    5111          18 :         p->crossSection.vals[1].y = FLT2FIX(-1);
    5112          18 :         p->crossSection.vals[2].x = FLT2FIX(-1);
    5113          18 :         p->crossSection.vals[2].y = FLT2FIX(-1);
    5114          18 :         p->crossSection.vals[3].x = FLT2FIX(-1);
    5115          18 :         p->crossSection.vals[3].y = FLT2FIX(1);
    5116          18 :         p->crossSection.vals[4].x = FLT2FIX(1);
    5117          18 :         p->crossSection.vals[4].y = FLT2FIX(1);
    5118          18 :         p->endCap = 1;
    5119          18 :         p->orientation.vals = (GF_Vec4*)gf_malloc(sizeof(GF_Vec4)*1);
    5120          18 :         p->orientation.count = 1;
    5121          18 :         p->orientation.vals[0].x = FLT2FIX(0);
    5122          18 :         p->orientation.vals[0].y = FLT2FIX(0);
    5123          18 :         p->orientation.vals[0].z = FLT2FIX(1);
    5124          18 :         p->orientation.vals[0].q = FLT2FIX(0);
    5125          18 :         p->scale.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*1);
    5126          18 :         p->scale.count = 1;
    5127          18 :         p->scale.vals[0].x = FLT2FIX(1);
    5128          18 :         p->scale.vals[0].y = FLT2FIX(1);
    5129          18 :         p->solid = 1;
    5130          18 :         p->spine.vals = (SFVec3f *)gf_malloc(sizeof(SFVec3f)*2);
    5131          18 :         p->spine.count = 2;
    5132          18 :         p->spine.vals[0].x = FLT2FIX(0);
    5133          18 :         p->spine.vals[0].y = FLT2FIX(0);
    5134          18 :         p->spine.vals[0].z = FLT2FIX(0);
    5135          18 :         p->spine.vals[1].x = FLT2FIX(0);
    5136          18 :         p->spine.vals[1].y = FLT2FIX(1);
    5137          18 :         p->spine.vals[1].z = FLT2FIX(0);
    5138          18 :         return (GF_Node *)p;
    5139          18 : }
    5140             : 
    5141             : 
    5142             : /*
    5143             :         Face Node deletion
    5144             : */
    5145             : 
    5146             : static void Face_Del(GF_Node *node)
    5147             : {
    5148           0 :         M_Face *p = (M_Face *) node;
    5149           0 :         gf_node_unregister((GF_Node *) p->fap, (GF_Node *) p);
    5150           0 :         gf_node_unregister((GF_Node *) p->fdp, (GF_Node *) p);
    5151           0 :         gf_node_unregister((GF_Node *) p->fit, (GF_Node *) p);
    5152           0 :         gf_node_unregister((GF_Node *) p->ttsSource, (GF_Node *) p);
    5153           0 :         gf_node_unregister_children((GF_Node *) p, p->renderedFace);
    5154           0 :         gf_node_free((GF_Node *) p);
    5155           0 : }
    5156             : 
    5157             : static const u16 Face_Def2All[] = { 0, 1, 2, 3, 4};
    5158             : static const u16 Face_In2All[] = { 0, 1, 2, 3, 4};
    5159             : static const u16 Face_Out2All[] = { 0, 1, 2, 3, 4};
    5160             : 
    5161             : static u32 Face_get_field_count(GF_Node *node, u8 IndexMode)
    5162             : {
    5163           0 :         switch(IndexMode) {
    5164             :         case GF_SG_FIELD_CODING_IN:
    5165           0 :                 return 5;
    5166             :         case GF_SG_FIELD_CODING_DEF:
    5167           0 :                 return 5;
    5168             :         case GF_SG_FIELD_CODING_OUT:
    5169           0 :                 return 5;
    5170             :         case GF_SG_FIELD_CODING_DYN:
    5171           0 :                 return 0;
    5172             :         default:
    5173           0 :                 return 5;
    5174             :         }
    5175           0 : }
    5176             : 
    5177             : static GF_Err Face_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5178             : {
    5179           0 :         switch(IndexMode) {
    5180             :         case GF_SG_FIELD_CODING_IN:
    5181           0 :                 *allField = Face_In2All[inField];
    5182           0 :                 return GF_OK;
    5183             :         case GF_SG_FIELD_CODING_DEF:
    5184           0 :                 *allField = Face_Def2All[inField];
    5185           0 :                 return GF_OK;
    5186             :         case GF_SG_FIELD_CODING_OUT:
    5187           0 :                 *allField = Face_Out2All[inField];
    5188           0 :                 return GF_OK;
    5189             :         default:
    5190           0 :                 return GF_BAD_PARAM;
    5191             :         }
    5192           0 : }
    5193             : static GF_Err Face_get_field(GF_Node *node, GF_FieldInfo *info)
    5194             : {
    5195           0 :         switch (info->fieldIndex) {
    5196             :         case 0:
    5197           0 :                 info->name = "fap";
    5198           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5199           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5200           0 :                 info->NDTtype = NDT_SFFAPNode;
    5201           0 :                 info->far_ptr = & ((M_Face *)node)->fap;
    5202           0 :                 return GF_OK;
    5203             :         case 1:
    5204           0 :                 info->name = "fdp";
    5205           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5206           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5207           0 :                 info->NDTtype = NDT_SFFDPNode;
    5208           0 :                 info->far_ptr = & ((M_Face *)node)->fdp;
    5209           0 :                 return GF_OK;
    5210             :         case 2:
    5211           0 :                 info->name = "fit";
    5212           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5213           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5214           0 :                 info->NDTtype = NDT_SFFITNode;
    5215           0 :                 info->far_ptr = & ((M_Face *)node)->fit;
    5216           0 :                 return GF_OK;
    5217             :         case 3:
    5218           0 :                 info->name = "ttsSource";
    5219           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5220           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5221           0 :                 info->NDTtype = NDT_SFAudioNode;
    5222           0 :                 info->far_ptr = & ((M_Face *)node)->ttsSource;
    5223           0 :                 return GF_OK;
    5224             :         case 4:
    5225           0 :                 info->name = "renderedFace";
    5226           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5227           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    5228           0 :                 info->NDTtype = NDT_SF3DNode;
    5229           0 :                 info->far_ptr = & ((M_Face *)node)->renderedFace;
    5230           0 :                 return GF_OK;
    5231             :         default:
    5232           0 :                 return GF_BAD_PARAM;
    5233             :         }
    5234           0 : }
    5235             : 
    5236             : 
    5237             : static s32 Face_get_field_index_by_name(char *name)
    5238             : {
    5239           0 :         if (!strcmp("fap", name)) return 0;
    5240           0 :         if (!strcmp("fdp", name)) return 1;
    5241           0 :         if (!strcmp("fit", name)) return 2;
    5242           0 :         if (!strcmp("ttsSource", name)) return 3;
    5243           0 :         if (!strcmp("renderedFace", name)) return 4;
    5244           0 :         return -1;
    5245           0 : }
    5246             : static Bool Face_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5247             : {
    5248             :         switch (FieldIndex) {
    5249             :         default:
    5250           0 :                 return 0;
    5251             :         }
    5252             : }
    5253             : 
    5254             : 
    5255             : 
    5256             : GF_Node *Face_Create()
    5257             : {
    5258             :         M_Face *p;
    5259           0 :         GF_SAFEALLOC(p, M_Face);
    5260           0 :         if(!p) return NULL;
    5261           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Face);
    5262             : 
    5263             :         /*default field values*/
    5264           0 :         return (GF_Node *)p;
    5265           0 : }
    5266             : 
    5267             : 
    5268             : /*
    5269             :         FaceDefMesh Node deletion
    5270             : */
    5271             : 
    5272             : static void FaceDefMesh_Del(GF_Node *node)
    5273             : {
    5274           0 :         M_FaceDefMesh *p = (M_FaceDefMesh *) node;
    5275           0 :         gf_node_unregister((GF_Node *) p->faceSceneGraphNode, (GF_Node *) p);
    5276           0 :         gf_sg_mfint32_del(p->intervalBorders);
    5277           0 :         gf_sg_mfint32_del(p->coordIndex);
    5278           0 :         gf_sg_mfvec3f_del(p->displacements);
    5279           0 :         gf_node_free((GF_Node *) p);
    5280           0 : }
    5281             : 
    5282             : static const u16 FaceDefMesh_Def2All[] = { 0, 1, 2, 3};
    5283             : 
    5284             : static u32 FaceDefMesh_get_field_count(GF_Node *node, u8 IndexMode)
    5285             : {
    5286           0 :         switch(IndexMode) {
    5287             :         case GF_SG_FIELD_CODING_IN:
    5288           0 :                 return 0;
    5289             :         case GF_SG_FIELD_CODING_DEF:
    5290           0 :                 return 4;
    5291             :         case GF_SG_FIELD_CODING_OUT:
    5292           0 :                 return 0;
    5293             :         case GF_SG_FIELD_CODING_DYN:
    5294           0 :                 return 0;
    5295             :         default:
    5296           0 :                 return 4;
    5297             :         }
    5298           0 : }
    5299             : 
    5300             : static GF_Err FaceDefMesh_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5301             : {
    5302           0 :         switch(IndexMode) {
    5303             :         case GF_SG_FIELD_CODING_DEF:
    5304           0 :                 *allField = FaceDefMesh_Def2All[inField];
    5305           0 :                 return GF_OK;
    5306             :         default:
    5307           0 :                 return GF_BAD_PARAM;
    5308             :         }
    5309           0 : }
    5310             : static GF_Err FaceDefMesh_get_field(GF_Node *node, GF_FieldInfo *info)
    5311             : {
    5312           0 :         switch (info->fieldIndex) {
    5313             :         case 0:
    5314           0 :                 info->name = "faceSceneGraphNode";
    5315           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5316           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5317           0 :                 info->NDTtype = NDT_SF3DNode;
    5318           0 :                 info->far_ptr = & ((M_FaceDefMesh *)node)->faceSceneGraphNode;
    5319           0 :                 return GF_OK;
    5320             :         case 1:
    5321           0 :                 info->name = "intervalBorders";
    5322           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5323           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    5324           0 :                 info->far_ptr = & ((M_FaceDefMesh *) node)->intervalBorders;
    5325           0 :                 return GF_OK;
    5326             :         case 2:
    5327           0 :                 info->name = "coordIndex";
    5328           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5329           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    5330           0 :                 info->far_ptr = & ((M_FaceDefMesh *) node)->coordIndex;
    5331           0 :                 return GF_OK;
    5332             :         case 3:
    5333           0 :                 info->name = "displacements";
    5334           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5335           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    5336           0 :                 info->far_ptr = & ((M_FaceDefMesh *) node)->displacements;
    5337           0 :                 return GF_OK;
    5338             :         default:
    5339           0 :                 return GF_BAD_PARAM;
    5340             :         }
    5341           0 : }
    5342             : 
    5343             : 
    5344             : static s32 FaceDefMesh_get_field_index_by_name(char *name)
    5345             : {
    5346           0 :         if (!strcmp("faceSceneGraphNode", name)) return 0;
    5347           0 :         if (!strcmp("intervalBorders", name)) return 1;
    5348           0 :         if (!strcmp("coordIndex", name)) return 2;
    5349           0 :         if (!strcmp("displacements", name)) return 3;
    5350           0 :         return -1;
    5351           0 : }
    5352             : static Bool FaceDefMesh_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5353             : {
    5354           0 :         switch (FieldIndex) {
    5355             :         case 1:
    5356           0 :                 *AType = 0;
    5357           0 :                 *QType = 0;
    5358           0 :                 return 1;
    5359             :         case 2:
    5360           0 :                 *AType = 0;
    5361           0 :                 *QType = 0;
    5362           0 :                 return 1;
    5363             :         case 3:
    5364           0 :                 *AType = 0;
    5365           0 :                 *QType = 0;
    5366           0 :                 return 1;
    5367             :         default:
    5368           0 :                 return 0;
    5369             :         }
    5370           0 : }
    5371             : 
    5372             : 
    5373             : 
    5374             : GF_Node *FaceDefMesh_Create()
    5375             : {
    5376             :         M_FaceDefMesh *p;
    5377           0 :         GF_SAFEALLOC(p, M_FaceDefMesh);
    5378           0 :         if(!p) return NULL;
    5379           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FaceDefMesh);
    5380             : 
    5381             :         /*default field values*/
    5382           0 :         return (GF_Node *)p;
    5383           0 : }
    5384             : 
    5385             : 
    5386             : /*
    5387             :         FaceDefTables Node deletion
    5388             : */
    5389             : 
    5390             : static void FaceDefTables_Del(GF_Node *node)
    5391             : {
    5392           0 :         M_FaceDefTables *p = (M_FaceDefTables *) node;
    5393           0 :         gf_node_unregister_children((GF_Node *) p, p->faceDefMesh);
    5394           0 :         gf_node_unregister_children((GF_Node *) p, p->faceDefTransform);
    5395           0 :         gf_node_free((GF_Node *) p);
    5396           0 : }
    5397             : 
    5398             : static const u16 FaceDefTables_Def2All[] = { 0, 1, 2, 3};
    5399             : static const u16 FaceDefTables_In2All[] = { 2, 3};
    5400             : static const u16 FaceDefTables_Out2All[] = { 2, 3};
    5401             : 
    5402             : static u32 FaceDefTables_get_field_count(GF_Node *node, u8 IndexMode)
    5403             : {
    5404           0 :         switch(IndexMode) {
    5405             :         case GF_SG_FIELD_CODING_IN:
    5406           0 :                 return 2;
    5407             :         case GF_SG_FIELD_CODING_DEF:
    5408           0 :                 return 4;
    5409             :         case GF_SG_FIELD_CODING_OUT:
    5410           0 :                 return 2;
    5411             :         case GF_SG_FIELD_CODING_DYN:
    5412           0 :                 return 0;
    5413             :         default:
    5414           0 :                 return 4;
    5415             :         }
    5416           0 : }
    5417             : 
    5418             : static GF_Err FaceDefTables_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5419             : {
    5420           0 :         switch(IndexMode) {
    5421             :         case GF_SG_FIELD_CODING_IN:
    5422           0 :                 *allField = FaceDefTables_In2All[inField];
    5423           0 :                 return GF_OK;
    5424             :         case GF_SG_FIELD_CODING_DEF:
    5425           0 :                 *allField = FaceDefTables_Def2All[inField];
    5426           0 :                 return GF_OK;
    5427             :         case GF_SG_FIELD_CODING_OUT:
    5428           0 :                 *allField = FaceDefTables_Out2All[inField];
    5429           0 :                 return GF_OK;
    5430             :         default:
    5431           0 :                 return GF_BAD_PARAM;
    5432             :         }
    5433           0 : }
    5434             : static GF_Err FaceDefTables_get_field(GF_Node *node, GF_FieldInfo *info)
    5435             : {
    5436           0 :         switch (info->fieldIndex) {
    5437             :         case 0:
    5438           0 :                 info->name = "fapID";
    5439           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5440           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5441           0 :                 info->far_ptr = & ((M_FaceDefTables *) node)->fapID;
    5442           0 :                 return GF_OK;
    5443             :         case 1:
    5444           0 :                 info->name = "highLevelSelect";
    5445           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5446           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5447           0 :                 info->far_ptr = & ((M_FaceDefTables *) node)->highLevelSelect;
    5448           0 :                 return GF_OK;
    5449             :         case 2:
    5450           0 :                 info->name = "faceDefMesh";
    5451           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5452           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    5453           0 :                 info->NDTtype = NDT_SFFaceDefMeshNode;
    5454           0 :                 info->far_ptr = & ((M_FaceDefTables *)node)->faceDefMesh;
    5455           0 :                 return GF_OK;
    5456             :         case 3:
    5457           0 :                 info->name = "faceDefTransform";
    5458           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5459           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    5460           0 :                 info->NDTtype = NDT_SFFaceDefTransformNode;
    5461           0 :                 info->far_ptr = & ((M_FaceDefTables *)node)->faceDefTransform;
    5462           0 :                 return GF_OK;
    5463             :         default:
    5464           0 :                 return GF_BAD_PARAM;
    5465             :         }
    5466           0 : }
    5467             : 
    5468             : 
    5469             : static s32 FaceDefTables_get_field_index_by_name(char *name)
    5470             : {
    5471           0 :         if (!strcmp("fapID", name)) return 0;
    5472           0 :         if (!strcmp("highLevelSelect", name)) return 1;
    5473           0 :         if (!strcmp("faceDefMesh", name)) return 2;
    5474           0 :         if (!strcmp("faceDefTransform", name)) return 3;
    5475           0 :         return -1;
    5476           0 : }
    5477             : static Bool FaceDefTables_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5478             : {
    5479           0 :         switch (FieldIndex) {
    5480             :         case 0:
    5481           0 :                 *AType = 0;
    5482           0 :                 *QType = 13;
    5483           0 :                 *QT13_bits = 7;
    5484           0 :                 *b_min = FLT2FIX(1);
    5485           0 :                 *b_max = FLT2FIX( 68);
    5486           0 :                 return 1;
    5487             :         case 1:
    5488           0 :                 *AType = 0;
    5489           0 :                 *QType = 13;
    5490           0 :                 *QT13_bits = 6;
    5491           0 :                 *b_min = FLT2FIX(1);
    5492           0 :                 *b_max = FLT2FIX( 64);
    5493           0 :                 return 1;
    5494             :         default:
    5495           0 :                 return 0;
    5496             :         }
    5497           0 : }
    5498             : 
    5499             : 
    5500             : 
    5501             : GF_Node *FaceDefTables_Create()
    5502             : {
    5503             :         M_FaceDefTables *p;
    5504           0 :         GF_SAFEALLOC(p, M_FaceDefTables);
    5505           0 :         if(!p) return NULL;
    5506           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FaceDefTables);
    5507             : 
    5508             :         /*default field values*/
    5509           0 :         p->fapID = 1;
    5510           0 :         p->highLevelSelect = 1;
    5511           0 :         return (GF_Node *)p;
    5512           0 : }
    5513             : 
    5514             : 
    5515             : /*
    5516             :         FaceDefTransform Node deletion
    5517             : */
    5518             : 
    5519             : static void FaceDefTransform_Del(GF_Node *node)
    5520             : {
    5521           0 :         M_FaceDefTransform *p = (M_FaceDefTransform *) node;
    5522           0 :         gf_node_unregister((GF_Node *) p->faceSceneGraphNode, (GF_Node *) p);
    5523           0 :         gf_node_free((GF_Node *) p);
    5524           0 : }
    5525             : 
    5526             : static const u16 FaceDefTransform_Def2All[] = { 0, 1, 2, 3, 4};
    5527             : 
    5528             : static u32 FaceDefTransform_get_field_count(GF_Node *node, u8 IndexMode)
    5529             : {
    5530           0 :         switch(IndexMode) {
    5531             :         case GF_SG_FIELD_CODING_IN:
    5532           0 :                 return 0;
    5533             :         case GF_SG_FIELD_CODING_DEF:
    5534           0 :                 return 5;
    5535             :         case GF_SG_FIELD_CODING_OUT:
    5536           0 :                 return 0;
    5537             :         case GF_SG_FIELD_CODING_DYN:
    5538           0 :                 return 0;
    5539             :         default:
    5540           0 :                 return 5;
    5541             :         }
    5542           0 : }
    5543             : 
    5544             : static GF_Err FaceDefTransform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5545             : {
    5546           0 :         switch(IndexMode) {
    5547             :         case GF_SG_FIELD_CODING_DEF:
    5548           0 :                 *allField = FaceDefTransform_Def2All[inField];
    5549           0 :                 return GF_OK;
    5550             :         default:
    5551           0 :                 return GF_BAD_PARAM;
    5552             :         }
    5553           0 : }
    5554             : static GF_Err FaceDefTransform_get_field(GF_Node *node, GF_FieldInfo *info)
    5555             : {
    5556           0 :         switch (info->fieldIndex) {
    5557             :         case 0:
    5558           0 :                 info->name = "faceSceneGraphNode";
    5559           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5560           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5561           0 :                 info->NDTtype = NDT_SF3DNode;
    5562           0 :                 info->far_ptr = & ((M_FaceDefTransform *)node)->faceSceneGraphNode;
    5563           0 :                 return GF_OK;
    5564             :         case 1:
    5565           0 :                 info->name = "fieldId";
    5566           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5567           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5568           0 :                 info->far_ptr = & ((M_FaceDefTransform *) node)->fieldId;
    5569           0 :                 return GF_OK;
    5570             :         case 2:
    5571           0 :                 info->name = "rotationDef";
    5572           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5573           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
    5574           0 :                 info->far_ptr = & ((M_FaceDefTransform *) node)->rotationDef;
    5575           0 :                 return GF_OK;
    5576             :         case 3:
    5577           0 :                 info->name = "scaleDef";
    5578           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5579           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    5580           0 :                 info->far_ptr = & ((M_FaceDefTransform *) node)->scaleDef;
    5581           0 :                 return GF_OK;
    5582             :         case 4:
    5583           0 :                 info->name = "translationDef";
    5584           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    5585           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    5586           0 :                 info->far_ptr = & ((M_FaceDefTransform *) node)->translationDef;
    5587           0 :                 return GF_OK;
    5588             :         default:
    5589           0 :                 return GF_BAD_PARAM;
    5590             :         }
    5591           0 : }
    5592             : 
    5593             : 
    5594             : static s32 FaceDefTransform_get_field_index_by_name(char *name)
    5595             : {
    5596           0 :         if (!strcmp("faceSceneGraphNode", name)) return 0;
    5597           0 :         if (!strcmp("fieldId", name)) return 1;
    5598           0 :         if (!strcmp("rotationDef", name)) return 2;
    5599           0 :         if (!strcmp("scaleDef", name)) return 3;
    5600           0 :         if (!strcmp("translationDef", name)) return 4;
    5601           0 :         return -1;
    5602           0 : }
    5603             : static Bool FaceDefTransform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5604             : {
    5605           0 :         switch (FieldIndex) {
    5606             :         case 2:
    5607           0 :                 *AType = 0;
    5608           0 :                 *QType = 10;
    5609           0 :                 *b_min = FIX_MIN;
    5610           0 :                 *b_max = FIX_MAX;
    5611           0 :                 return 1;
    5612             :         case 3:
    5613           0 :                 *AType = 0;
    5614           0 :                 *QType = 7;
    5615           0 :                 return 1;
    5616             :         case 4:
    5617           0 :                 *AType = 0;
    5618           0 :                 *QType = 1;
    5619           0 :                 return 1;
    5620             :         default:
    5621           0 :                 return 0;
    5622             :         }
    5623           0 : }
    5624             : 
    5625             : 
    5626             : 
    5627             : GF_Node *FaceDefTransform_Create()
    5628             : {
    5629             :         M_FaceDefTransform *p;
    5630           0 :         GF_SAFEALLOC(p, M_FaceDefTransform);
    5631           0 :         if(!p) return NULL;
    5632           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FaceDefTransform);
    5633             : 
    5634             :         /*default field values*/
    5635           0 :         p->fieldId = 1;
    5636           0 :         p->rotationDef.x = FLT2FIX(0);
    5637           0 :         p->rotationDef.y = FLT2FIX(0);
    5638           0 :         p->rotationDef.z = FLT2FIX(1);
    5639           0 :         p->rotationDef.q = FLT2FIX(0);
    5640           0 :         p->scaleDef.x = FLT2FIX(1);
    5641           0 :         p->scaleDef.y = FLT2FIX(1);
    5642           0 :         p->scaleDef.z = FLT2FIX(1);
    5643           0 :         p->translationDef.x = FLT2FIX(0);
    5644           0 :         p->translationDef.y = FLT2FIX(0);
    5645           0 :         p->translationDef.z = FLT2FIX(0);
    5646           0 :         return (GF_Node *)p;
    5647           0 : }
    5648             : 
    5649             : 
    5650             : /*
    5651             :         FAP Node deletion
    5652             : */
    5653             : 
    5654             : static void FAP_Del(GF_Node *node)
    5655             : {
    5656           0 :         M_FAP *p = (M_FAP *) node;
    5657           0 :         gf_node_unregister((GF_Node *) p->viseme, (GF_Node *) p);
    5658           0 :         gf_node_unregister((GF_Node *) p->expression, (GF_Node *) p);
    5659           0 :         gf_node_free((GF_Node *) p);
    5660           0 : }
    5661             : 
    5662             : static const u16 FAP_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67};
    5663             : static const u16 FAP_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67};
    5664             : static const u16 FAP_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67};
    5665             : 
    5666             : static u32 FAP_get_field_count(GF_Node *node, u8 IndexMode)
    5667             : {
    5668           0 :         switch(IndexMode) {
    5669             :         case GF_SG_FIELD_CODING_IN:
    5670           0 :                 return 68;
    5671             :         case GF_SG_FIELD_CODING_DEF:
    5672           0 :                 return 68;
    5673             :         case GF_SG_FIELD_CODING_OUT:
    5674           0 :                 return 68;
    5675             :         case GF_SG_FIELD_CODING_DYN:
    5676           0 :                 return 0;
    5677             :         default:
    5678           0 :                 return 68;
    5679             :         }
    5680           0 : }
    5681             : 
    5682             : static GF_Err FAP_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5683             : {
    5684           0 :         switch(IndexMode) {
    5685             :         case GF_SG_FIELD_CODING_IN:
    5686           0 :                 *allField = FAP_In2All[inField];
    5687           0 :                 return GF_OK;
    5688             :         case GF_SG_FIELD_CODING_DEF:
    5689           0 :                 *allField = FAP_Def2All[inField];
    5690           0 :                 return GF_OK;
    5691             :         case GF_SG_FIELD_CODING_OUT:
    5692           0 :                 *allField = FAP_Out2All[inField];
    5693           0 :                 return GF_OK;
    5694             :         default:
    5695           0 :                 return GF_BAD_PARAM;
    5696             :         }
    5697           0 : }
    5698             : static GF_Err FAP_get_field(GF_Node *node, GF_FieldInfo *info)
    5699             : {
    5700           0 :         switch (info->fieldIndex) {
    5701             :         case 0:
    5702           0 :                 info->name = "viseme";
    5703           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5704           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5705           0 :                 info->NDTtype = NDT_SFVisemeNode;
    5706           0 :                 info->far_ptr = & ((M_FAP *)node)->viseme;
    5707           0 :                 return GF_OK;
    5708             :         case 1:
    5709           0 :                 info->name = "expression";
    5710           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5711           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5712           0 :                 info->NDTtype = NDT_SFExpressionNode;
    5713           0 :                 info->far_ptr = & ((M_FAP *)node)->expression;
    5714           0 :                 return GF_OK;
    5715             :         case 2:
    5716           0 :                 info->name = "open_jaw";
    5717           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5718           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5719           0 :                 info->far_ptr = & ((M_FAP *) node)->open_jaw;
    5720           0 :                 return GF_OK;
    5721             :         case 3:
    5722           0 :                 info->name = "lower_t_midlip";
    5723           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5724           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5725           0 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_midlip;
    5726           0 :                 return GF_OK;
    5727             :         case 4:
    5728           0 :                 info->name = "raise_b_midlip";
    5729           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5730           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5731           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_b_midlip;
    5732           0 :                 return GF_OK;
    5733             :         case 5:
    5734           0 :                 info->name = "stretch_l_corner";
    5735           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5736           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5737           0 :                 info->far_ptr = & ((M_FAP *) node)->stretch_l_corner;
    5738           0 :                 return GF_OK;
    5739             :         case 6:
    5740           0 :                 info->name = "stretch_r_corner";
    5741           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5742           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5743           0 :                 info->far_ptr = & ((M_FAP *) node)->stretch_r_corner;
    5744           0 :                 return GF_OK;
    5745             :         case 7:
    5746           0 :                 info->name = "lower_t_lip_lm";
    5747           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5748           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5749           0 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_lip_lm;
    5750           0 :                 return GF_OK;
    5751             :         case 8:
    5752           0 :                 info->name = "lower_t_lip_rm";
    5753           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5754           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5755           0 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_lip_rm;
    5756           0 :                 return GF_OK;
    5757             :         case 9:
    5758           0 :                 info->name = "lower_b_lip_lm";
    5759           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5760           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5761           0 :                 info->far_ptr = & ((M_FAP *) node)->lower_b_lip_lm;
    5762           0 :                 return GF_OK;
    5763             :         case 10:
    5764           0 :                 info->name = "lower_b_lip_rm";
    5765           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5766           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5767           0 :                 info->far_ptr = & ((M_FAP *) node)->lower_b_lip_rm;
    5768           0 :                 return GF_OK;
    5769             :         case 11:
    5770           0 :                 info->name = "raise_l_cornerlip";
    5771           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5772           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5773           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_cornerlip;
    5774           0 :                 return GF_OK;
    5775             :         case 12:
    5776           0 :                 info->name = "raise_r_cornerlip";
    5777           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5778           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5779           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_cornerlip;
    5780           0 :                 return GF_OK;
    5781             :         case 13:
    5782           0 :                 info->name = "thrust_jaw";
    5783           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5784           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5785           0 :                 info->far_ptr = & ((M_FAP *) node)->thrust_jaw;
    5786           0 :                 return GF_OK;
    5787             :         case 14:
    5788           0 :                 info->name = "shift_jaw";
    5789           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5790           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5791           0 :                 info->far_ptr = & ((M_FAP *) node)->shift_jaw;
    5792           0 :                 return GF_OK;
    5793             :         case 15:
    5794           0 :                 info->name = "push_b_lip";
    5795           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5796           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5797           0 :                 info->far_ptr = & ((M_FAP *) node)->push_b_lip;
    5798           0 :                 return GF_OK;
    5799             :         case 16:
    5800           0 :                 info->name = "push_t_lip";
    5801           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5802           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5803           0 :                 info->far_ptr = & ((M_FAP *) node)->push_t_lip;
    5804           0 :                 return GF_OK;
    5805             :         case 17:
    5806           0 :                 info->name = "depress_chin";
    5807           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5808           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5809           0 :                 info->far_ptr = & ((M_FAP *) node)->depress_chin;
    5810           0 :                 return GF_OK;
    5811             :         case 18:
    5812           0 :                 info->name = "close_t_l_eyelid";
    5813           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5814           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5815           0 :                 info->far_ptr = & ((M_FAP *) node)->close_t_l_eyelid;
    5816           0 :                 return GF_OK;
    5817             :         case 19:
    5818           0 :                 info->name = "close_t_r_eyelid";
    5819           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5820           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5821           0 :                 info->far_ptr = & ((M_FAP *) node)->close_t_r_eyelid;
    5822           0 :                 return GF_OK;
    5823             :         case 20:
    5824           0 :                 info->name = "close_b_l_eyelid";
    5825           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5826           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5827           0 :                 info->far_ptr = & ((M_FAP *) node)->close_b_l_eyelid;
    5828           0 :                 return GF_OK;
    5829             :         case 21:
    5830           0 :                 info->name = "close_b_r_eyelid";
    5831           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5832           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5833           0 :                 info->far_ptr = & ((M_FAP *) node)->close_b_r_eyelid;
    5834           0 :                 return GF_OK;
    5835             :         case 22:
    5836           0 :                 info->name = "yaw_l_eyeball";
    5837           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5838           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5839           0 :                 info->far_ptr = & ((M_FAP *) node)->yaw_l_eyeball;
    5840           0 :                 return GF_OK;
    5841             :         case 23:
    5842           0 :                 info->name = "yaw_r_eyeball";
    5843           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5844           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5845           0 :                 info->far_ptr = & ((M_FAP *) node)->yaw_r_eyeball;
    5846           0 :                 return GF_OK;
    5847             :         case 24:
    5848           0 :                 info->name = "pitch_l_eyeball";
    5849           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5850           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5851           0 :                 info->far_ptr = & ((M_FAP *) node)->pitch_l_eyeball;
    5852           0 :                 return GF_OK;
    5853             :         case 25:
    5854           0 :                 info->name = "pitch_r_eyeball";
    5855           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5856           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5857           0 :                 info->far_ptr = & ((M_FAP *) node)->pitch_r_eyeball;
    5858           0 :                 return GF_OK;
    5859             :         case 26:
    5860           0 :                 info->name = "thrust_l_eyeball";
    5861           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5862           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5863           0 :                 info->far_ptr = & ((M_FAP *) node)->thrust_l_eyeball;
    5864           0 :                 return GF_OK;
    5865             :         case 27:
    5866           0 :                 info->name = "thrust_r_eyeball";
    5867           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5868           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5869           0 :                 info->far_ptr = & ((M_FAP *) node)->thrust_r_eyeball;
    5870           0 :                 return GF_OK;
    5871             :         case 28:
    5872           0 :                 info->name = "dilate_l_pupil";
    5873           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5874           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5875           0 :                 info->far_ptr = & ((M_FAP *) node)->dilate_l_pupil;
    5876           0 :                 return GF_OK;
    5877             :         case 29:
    5878           0 :                 info->name = "dilate_r_pupil";
    5879           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5880           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5881           0 :                 info->far_ptr = & ((M_FAP *) node)->dilate_r_pupil;
    5882           0 :                 return GF_OK;
    5883             :         case 30:
    5884           0 :                 info->name = "raise_l_i_eyebrow";
    5885           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5886           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5887           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_i_eyebrow;
    5888           0 :                 return GF_OK;
    5889             :         case 31:
    5890           0 :                 info->name = "raise_r_i_eyebrow";
    5891           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5892           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5893           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_i_eyebrow;
    5894           0 :                 return GF_OK;
    5895             :         case 32:
    5896           0 :                 info->name = "raise_l_m_eyebrow";
    5897           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5898           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5899           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_m_eyebrow;
    5900           0 :                 return GF_OK;
    5901             :         case 33:
    5902           0 :                 info->name = "raise_r_m_eyebrow";
    5903           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5904           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5905           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_m_eyebrow;
    5906           0 :                 return GF_OK;
    5907             :         case 34:
    5908           0 :                 info->name = "raise_l_o_eyebrow";
    5909           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5910           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5911           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_o_eyebrow;
    5912           0 :                 return GF_OK;
    5913             :         case 35:
    5914           0 :                 info->name = "raise_r_o_eyebrow";
    5915           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5916           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5917           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_o_eyebrow;
    5918           0 :                 return GF_OK;
    5919             :         case 36:
    5920           0 :                 info->name = "squeeze_l_eyebrow";
    5921           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5922           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5923           0 :                 info->far_ptr = & ((M_FAP *) node)->squeeze_l_eyebrow;
    5924           0 :                 return GF_OK;
    5925             :         case 37:
    5926           0 :                 info->name = "squeeze_r_eyebrow";
    5927           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5928           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5929           0 :                 info->far_ptr = & ((M_FAP *) node)->squeeze_r_eyebrow;
    5930           0 :                 return GF_OK;
    5931             :         case 38:
    5932           0 :                 info->name = "puff_l_cheek";
    5933           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5934           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5935           0 :                 info->far_ptr = & ((M_FAP *) node)->puff_l_cheek;
    5936           0 :                 return GF_OK;
    5937             :         case 39:
    5938           0 :                 info->name = "puff_r_cheek";
    5939           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5940           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5941           0 :                 info->far_ptr = & ((M_FAP *) node)->puff_r_cheek;
    5942           0 :                 return GF_OK;
    5943             :         case 40:
    5944           0 :                 info->name = "lift_l_cheek";
    5945           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5946           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5947           0 :                 info->far_ptr = & ((M_FAP *) node)->lift_l_cheek;
    5948           0 :                 return GF_OK;
    5949             :         case 41:
    5950           0 :                 info->name = "lift_r_cheek";
    5951           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5952           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5953           0 :                 info->far_ptr = & ((M_FAP *) node)->lift_r_cheek;
    5954           0 :                 return GF_OK;
    5955             :         case 42:
    5956           0 :                 info->name = "shift_tongue_tip";
    5957           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5958           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5959           0 :                 info->far_ptr = & ((M_FAP *) node)->shift_tongue_tip;
    5960           0 :                 return GF_OK;
    5961             :         case 43:
    5962           0 :                 info->name = "raise_tongue_tip";
    5963           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5964           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5965           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_tongue_tip;
    5966           0 :                 return GF_OK;
    5967             :         case 44:
    5968           0 :                 info->name = "thrust_tongue_tip";
    5969           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5970           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5971           0 :                 info->far_ptr = & ((M_FAP *) node)->thrust_tongue_tip;
    5972           0 :                 return GF_OK;
    5973             :         case 45:
    5974           0 :                 info->name = "raise_tongue";
    5975           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5976           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5977           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_tongue;
    5978           0 :                 return GF_OK;
    5979             :         case 46:
    5980           0 :                 info->name = "tongue_roll";
    5981           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5982           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5983           0 :                 info->far_ptr = & ((M_FAP *) node)->tongue_roll;
    5984           0 :                 return GF_OK;
    5985             :         case 47:
    5986           0 :                 info->name = "head_pitch";
    5987           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5988           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5989           0 :                 info->far_ptr = & ((M_FAP *) node)->head_pitch;
    5990           0 :                 return GF_OK;
    5991             :         case 48:
    5992           0 :                 info->name = "head_yaw";
    5993           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5994           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5995           0 :                 info->far_ptr = & ((M_FAP *) node)->head_yaw;
    5996           0 :                 return GF_OK;
    5997             :         case 49:
    5998           0 :                 info->name = "head_roll";
    5999           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6000           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6001           0 :                 info->far_ptr = & ((M_FAP *) node)->head_roll;
    6002           0 :                 return GF_OK;
    6003             :         case 50:
    6004           0 :                 info->name = "lower_t_midlip_o";
    6005           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6006           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6007           0 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_midlip_o;
    6008           0 :                 return GF_OK;
    6009             :         case 51:
    6010           0 :                 info->name = "raise_b_midlip_o";
    6011           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6012           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6013           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_b_midlip_o;
    6014           0 :                 return GF_OK;
    6015             :         case 52:
    6016           0 :                 info->name = "stretch_l_cornerlip";
    6017           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6018           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6019           0 :                 info->far_ptr = & ((M_FAP *) node)->stretch_l_cornerlip;
    6020           0 :                 return GF_OK;
    6021             :         case 53:
    6022           0 :                 info->name = "stretch_r_cornerlip";
    6023           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6024           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6025           0 :                 info->far_ptr = & ((M_FAP *) node)->stretch_r_cornerlip;
    6026           0 :                 return GF_OK;
    6027             :         case 54:
    6028           0 :                 info->name = "lower_t_lip_lm_o";
    6029           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6030           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6031           0 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_lip_lm_o;
    6032           0 :                 return GF_OK;
    6033             :         case 55:
    6034           0 :                 info->name = "lower_t_lip_rm_o";
    6035           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6036           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6037           0 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_lip_rm_o;
    6038           0 :                 return GF_OK;
    6039             :         case 56:
    6040           0 :                 info->name = "raise_b_lip_lm_o";
    6041           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6042           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6043           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_b_lip_lm_o;
    6044           0 :                 return GF_OK;
    6045             :         case 57:
    6046           0 :                 info->name = "raise_b_lip_rm_o";
    6047           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6048           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6049           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_b_lip_rm_o;
    6050           0 :                 return GF_OK;
    6051             :         case 58:
    6052           0 :                 info->name = "raise_l_cornerlip_o";
    6053           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6054           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6055           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_cornerlip_o;
    6056           0 :                 return GF_OK;
    6057             :         case 59:
    6058           0 :                 info->name = "raise_r_cornerlip_o";
    6059           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6060           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6061           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_cornerlip_o;
    6062           0 :                 return GF_OK;
    6063             :         case 60:
    6064           0 :                 info->name = "stretch_l_nose";
    6065           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6066           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6067           0 :                 info->far_ptr = & ((M_FAP *) node)->stretch_l_nose;
    6068           0 :                 return GF_OK;
    6069             :         case 61:
    6070           0 :                 info->name = "stretch_r_nose";
    6071           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6072           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6073           0 :                 info->far_ptr = & ((M_FAP *) node)->stretch_r_nose;
    6074           0 :                 return GF_OK;
    6075             :         case 62:
    6076           0 :                 info->name = "raise_nose";
    6077           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6078           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6079           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_nose;
    6080           0 :                 return GF_OK;
    6081             :         case 63:
    6082           0 :                 info->name = "bend_nose";
    6083           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6084           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6085           0 :                 info->far_ptr = & ((M_FAP *) node)->bend_nose;
    6086           0 :                 return GF_OK;
    6087             :         case 64:
    6088           0 :                 info->name = "raise_l_ear";
    6089           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6090           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6091           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_ear;
    6092           0 :                 return GF_OK;
    6093             :         case 65:
    6094           0 :                 info->name = "raise_r_ear";
    6095           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6096           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6097           0 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_ear;
    6098           0 :                 return GF_OK;
    6099             :         case 66:
    6100           0 :                 info->name = "pull_l_ear";
    6101           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6102           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6103           0 :                 info->far_ptr = & ((M_FAP *) node)->pull_l_ear;
    6104           0 :                 return GF_OK;
    6105             :         case 67:
    6106           0 :                 info->name = "pull_r_ear";
    6107           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6108           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6109           0 :                 info->far_ptr = & ((M_FAP *) node)->pull_r_ear;
    6110           0 :                 return GF_OK;
    6111             :         default:
    6112           0 :                 return GF_BAD_PARAM;
    6113             :         }
    6114           0 : }
    6115             : 
    6116             : 
    6117             : static s32 FAP_get_field_index_by_name(char *name)
    6118             : {
    6119           0 :         if (!strcmp("viseme", name)) return 0;
    6120           0 :         if (!strcmp("expression", name)) return 1;
    6121           0 :         if (!strcmp("open_jaw", name)) return 2;
    6122           0 :         if (!strcmp("lower_t_midlip", name)) return 3;
    6123           0 :         if (!strcmp("raise_b_midlip", name)) return 4;
    6124           0 :         if (!strcmp("stretch_l_corner", name)) return 5;
    6125           0 :         if (!strcmp("stretch_r_corner", name)) return 6;
    6126           0 :         if (!strcmp("lower_t_lip_lm", name)) return 7;
    6127           0 :         if (!strcmp("lower_t_lip_rm", name)) return 8;
    6128           0 :         if (!strcmp("lower_b_lip_lm", name)) return 9;
    6129           0 :         if (!strcmp("lower_b_lip_rm", name)) return 10;
    6130           0 :         if (!strcmp("raise_l_cornerlip", name)) return 11;
    6131           0 :         if (!strcmp("raise_r_cornerlip", name)) return 12;
    6132           0 :         if (!strcmp("thrust_jaw", name)) return 13;
    6133           0 :         if (!strcmp("shift_jaw", name)) return 14;
    6134           0 :         if (!strcmp("push_b_lip", name)) return 15;
    6135           0 :         if (!strcmp("push_t_lip", name)) return 16;
    6136           0 :         if (!strcmp("depress_chin", name)) return 17;
    6137           0 :         if (!strcmp("close_t_l_eyelid", name)) return 18;
    6138           0 :         if (!strcmp("close_t_r_eyelid", name)) return 19;
    6139           0 :         if (!strcmp("close_b_l_eyelid", name)) return 20;
    6140           0 :         if (!strcmp("close_b_r_eyelid", name)) return 21;
    6141           0 :         if (!strcmp("yaw_l_eyeball", name)) return 22;
    6142           0 :         if (!strcmp("yaw_r_eyeball", name)) return 23;
    6143           0 :         if (!strcmp("pitch_l_eyeball", name)) return 24;
    6144           0 :         if (!strcmp("pitch_r_eyeball", name)) return 25;
    6145           0 :         if (!strcmp("thrust_l_eyeball", name)) return 26;
    6146           0 :         if (!strcmp("thrust_r_eyeball", name)) return 27;
    6147           0 :         if (!strcmp("dilate_l_pupil", name)) return 28;
    6148           0 :         if (!strcmp("dilate_r_pupil", name)) return 29;
    6149           0 :         if (!strcmp("raise_l_i_eyebrow", name)) return 30;
    6150           0 :         if (!strcmp("raise_r_i_eyebrow", name)) return 31;
    6151           0 :         if (!strcmp("raise_l_m_eyebrow", name)) return 32;
    6152           0 :         if (!strcmp("raise_r_m_eyebrow", name)) return 33;
    6153           0 :         if (!strcmp("raise_l_o_eyebrow", name)) return 34;
    6154           0 :         if (!strcmp("raise_r_o_eyebrow", name)) return 35;
    6155           0 :         if (!strcmp("squeeze_l_eyebrow", name)) return 36;
    6156           0 :         if (!strcmp("squeeze_r_eyebrow", name)) return 37;
    6157           0 :         if (!strcmp("puff_l_cheek", name)) return 38;
    6158           0 :         if (!strcmp("puff_r_cheek", name)) return 39;
    6159           0 :         if (!strcmp("lift_l_cheek", name)) return 40;
    6160           0 :         if (!strcmp("lift_r_cheek", name)) return 41;
    6161           0 :         if (!strcmp("shift_tongue_tip", name)) return 42;
    6162           0 :         if (!strcmp("raise_tongue_tip", name)) return 43;
    6163           0 :         if (!strcmp("thrust_tongue_tip", name)) return 44;
    6164           0 :         if (!strcmp("raise_tongue", name)) return 45;
    6165           0 :         if (!strcmp("tongue_roll", name)) return 46;
    6166           0 :         if (!strcmp("head_pitch", name)) return 47;
    6167           0 :         if (!strcmp("head_yaw", name)) return 48;
    6168           0 :         if (!strcmp("head_roll", name)) return 49;
    6169           0 :         if (!strcmp("lower_t_midlip_o", name)) return 50;
    6170           0 :         if (!strcmp("raise_b_midlip_o", name)) return 51;
    6171           0 :         if (!strcmp("stretch_l_cornerlip", name)) return 52;
    6172           0 :         if (!strcmp("stretch_r_cornerlip", name)) return 53;
    6173           0 :         if (!strcmp("lower_t_lip_lm_o", name)) return 54;
    6174           0 :         if (!strcmp("lower_t_lip_rm_o", name)) return 55;
    6175           0 :         if (!strcmp("raise_b_lip_lm_o", name)) return 56;
    6176           0 :         if (!strcmp("raise_b_lip_rm_o", name)) return 57;
    6177           0 :         if (!strcmp("raise_l_cornerlip_o", name)) return 58;
    6178           0 :         if (!strcmp("raise_r_cornerlip_o", name)) return 59;
    6179           0 :         if (!strcmp("stretch_l_nose", name)) return 60;
    6180           0 :         if (!strcmp("stretch_r_nose", name)) return 61;
    6181           0 :         if (!strcmp("raise_nose", name)) return 62;
    6182           0 :         if (!strcmp("bend_nose", name)) return 63;
    6183           0 :         if (!strcmp("raise_l_ear", name)) return 64;
    6184           0 :         if (!strcmp("raise_r_ear", name)) return 65;
    6185           0 :         if (!strcmp("pull_l_ear", name)) return 66;
    6186           0 :         if (!strcmp("pull_r_ear", name)) return 67;
    6187           0 :         return -1;
    6188           0 : }
    6189             : static Bool FAP_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    6190             : {
    6191           0 :         switch (FieldIndex) {
    6192             :         case 2:
    6193           0 :                 *AType = 0;
    6194           0 :                 *QType = 0;
    6195           0 :                 *b_min = FLT2FIX(0);
    6196           0 :                 *b_max = FIX_MAX;
    6197           0 :                 return 1;
    6198             :         case 3:
    6199           0 :                 *AType = 0;
    6200           0 :                 *QType = 0;
    6201           0 :                 *b_min = FIX_MIN;
    6202           0 :                 *b_max = FIX_MAX;
    6203           0 :                 return 1;
    6204             :         case 4:
    6205           0 :                 *AType = 0;
    6206           0 :                 *QType = 0;
    6207           0 :                 *b_min = FIX_MIN;
    6208           0 :                 *b_max = FIX_MAX;
    6209           0 :                 return 1;
    6210             :         case 5:
    6211           0 :                 *AType = 0;
    6212           0 :                 *QType = 0;
    6213           0 :                 *b_min = FIX_MIN;
    6214           0 :                 *b_max = FIX_MAX;
    6215           0 :                 return 1;
    6216             :         case 6:
    6217           0 :                 *AType = 0;
    6218           0 :                 *QType = 0;
    6219           0 :                 *b_min = FIX_MIN;
    6220           0 :                 *b_max = FIX_MAX;
    6221           0 :                 return 1;
    6222             :         case 7:
    6223           0 :                 *AType = 0;
    6224           0 :                 *QType = 0;
    6225           0 :                 *b_min = FIX_MIN;
    6226           0 :                 *b_max = FIX_MAX;
    6227           0 :                 return 1;
    6228             :         case 8:
    6229           0 :                 *AType = 0;
    6230           0 :                 *QType = 0;
    6231           0 :                 *b_min = FIX_MIN;
    6232           0 :                 *b_max = FIX_MAX;
    6233           0 :                 return 1;
    6234             :         case 9:
    6235           0 :                 *AType = 0;
    6236           0 :                 *QType = 0;
    6237           0 :                 *b_min = FIX_MIN;
    6238           0 :                 *b_max = FIX_MAX;
    6239           0 :                 return 1;
    6240             :         case 10:
    6241           0 :                 *AType = 0;
    6242           0 :                 *QType = 0;
    6243           0 :                 *b_min = FIX_MIN;
    6244           0 :                 *b_max = FIX_MAX;
    6245           0 :                 return 1;
    6246             :         case 11:
    6247           0 :                 *AType = 0;
    6248           0 :                 *QType = 0;
    6249           0 :                 *b_min = FIX_MIN;
    6250           0 :                 *b_max = FIX_MAX;
    6251           0 :                 return 1;
    6252             :         case 12:
    6253           0 :                 *AType = 0;
    6254           0 :                 *QType = 0;
    6255           0 :                 *b_min = FIX_MIN;
    6256           0 :                 *b_max = FIX_MAX;
    6257           0 :                 return 1;
    6258             :         case 13:
    6259           0 :                 *AType = 0;
    6260           0 :                 *QType = 0;
    6261           0 :                 *b_min = FLT2FIX(0);
    6262           0 :                 *b_max = FIX_MAX;
    6263           0 :                 return 1;
    6264             :         case 14:
    6265           0 :                 *AType = 0;
    6266           0 :                 *QType = 0;
    6267           0 :                 *b_min = FIX_MIN;
    6268           0 :                 *b_max = FIX_MAX;
    6269           0 :                 return 1;
    6270             :         case 15:
    6271           0 :                 *AType = 0;
    6272           0 :                 *QType = 0;
    6273           0 :                 *b_min = FIX_MIN;
    6274           0 :                 *b_max = FIX_MAX;
    6275           0 :                 return 1;
    6276             :         case 16:
    6277           0 :                 *AType = 0;
    6278           0 :                 *QType = 0;
    6279           0 :                 *b_min = FIX_MIN;
    6280           0 :                 *b_max = FIX_MAX;
    6281           0 :                 return 1;
    6282             :         case 17:
    6283           0 :                 *AType = 0;
    6284           0 :                 *QType = 0;
    6285           0 :                 *b_min = FIX_MIN;
    6286           0 :                 *b_max = FIX_MAX;
    6287           0 :                 return 1;
    6288             :         case 18:
    6289           0 :                 *AType = 0;
    6290           0 :                 *QType = 0;
    6291           0 :                 *b_min = FIX_MIN;
    6292           0 :                 *b_max = FIX_MAX;
    6293           0 :                 return 1;
    6294             :         case 19:
    6295           0 :                 *AType = 0;
    6296           0 :                 *QType = 0;
    6297           0 :                 *b_min = FIX_MIN;
    6298           0 :                 *b_max = FIX_MAX;
    6299           0 :                 return 1;
    6300             :         case 20:
    6301           0 :                 *AType = 0;
    6302           0 :                 *QType = 0;
    6303           0 :                 *b_min = FIX_MIN;
    6304           0 :                 *b_max = FIX_MAX;
    6305           0 :                 return 1;
    6306             :         case 21:
    6307           0 :                 *AType = 0;
    6308           0 :                 *QType = 0;
    6309           0 :                 *b_min = FIX_MIN;
    6310           0 :                 *b_max = FIX_MAX;
    6311           0 :                 return 1;
    6312             :         case 22:
    6313           0 :                 *AType = 0;
    6314           0 :                 *QType = 0;
    6315           0 :                 *b_min = FIX_MIN;
    6316           0 :                 *b_max = FIX_MAX;
    6317           0 :                 return 1;
    6318             :         case 23:
    6319           0 :                 *AType = 0;
    6320           0 :                 *QType = 0;
    6321           0 :                 *b_min = FIX_MIN;
    6322           0 :                 *b_max = FIX_MAX;
    6323           0 :                 return 1;
    6324             :         case 24:
    6325           0 :                 *AType = 0;
    6326           0 :                 *QType = 0;
    6327           0 :                 *b_min = FIX_MIN;
    6328           0 :                 *b_max = FIX_MAX;
    6329           0 :                 return 1;
    6330             :         case 25:
    6331           0 :                 *AType = 0;
    6332           0 :                 *QType = 0;
    6333           0 :                 *b_min = FIX_MIN;
    6334           0 :                 *b_max = FIX_MAX;
    6335           0 :                 return 1;
    6336             :         case 26:
    6337           0 :                 *AType = 0;
    6338           0 :                 *QType = 0;
    6339           0 :                 *b_min = FIX_MIN;
    6340           0 :                 *b_max = FIX_MAX;
    6341           0 :                 return 1;
    6342             :         case 27:
    6343           0 :                 *AType = 0;
    6344           0 :                 *QType = 0;
    6345           0 :                 *b_min = FIX_MIN;
    6346           0 :                 *b_max = FIX_MAX;
    6347           0 :                 return 1;
    6348             :         case 28:
    6349           0 :                 *AType = 0;
    6350           0 :                 *QType = 0;
    6351           0 :                 *b_min = FIX_MIN;
    6352           0 :                 *b_max = FIX_MAX;
    6353           0 :                 return 1;
    6354             :         case 29:
    6355           0 :                 *AType = 0;
    6356           0 :                 *QType = 0;
    6357           0 :                 *b_min = FIX_MIN;
    6358           0 :                 *b_max = FIX_MAX;
    6359           0 :                 return 1;
    6360             :         case 30:
    6361           0 :                 *AType = 0;
    6362           0 :                 *QType = 0;
    6363           0 :                 *b_min = FIX_MIN;
    6364           0 :                 *b_max = FIX_MAX;
    6365           0 :                 return 1;
    6366             :         case 31:
    6367           0 :                 *AType = 0;
    6368           0 :                 *QType = 0;
    6369           0 :                 *b_min = FIX_MIN;
    6370           0 :                 *b_max = FIX_MAX;
    6371           0 :                 return 1;
    6372             :         case 32:
    6373           0 :                 *AType = 0;
    6374           0 :                 *QType = 0;
    6375           0 :                 *b_min = FIX_MIN;
    6376           0 :                 *b_max = FIX_MAX;
    6377           0 :                 return 1;
    6378             :         case 33:
    6379           0 :                 *AType = 0;
    6380           0 :                 *QType = 0;
    6381           0 :                 *b_min = FIX_MIN;
    6382           0 :                 *b_max = FIX_MAX;
    6383           0 :                 return 1;
    6384             :         case 34:
    6385           0 :                 *AType = 0;
    6386           0 :                 *QType = 0;
    6387           0 :                 *b_min = FIX_MIN;
    6388           0 :                 *b_max = FIX_MAX;
    6389           0 :                 return 1;
    6390             :         case 35:
    6391           0 :                 *AType = 0;
    6392           0 :                 *QType = 0;
    6393           0 :                 *b_min = FIX_MIN;
    6394           0 :                 *b_max = FIX_MAX;
    6395           0 :                 return 1;
    6396             :         case 36:
    6397           0 :                 *AType = 0;
    6398           0 :                 *QType = 0;
    6399           0 :                 *b_min = FIX_MIN;
    6400           0 :                 *b_max = FIX_MAX;
    6401           0 :                 return 1;
    6402             :         case 37:
    6403           0 :                 *AType = 0;
    6404           0 :                 *QType = 0;
    6405           0 :                 *b_min = FIX_MIN;
    6406           0 :                 *b_max = FIX_MAX;
    6407           0 :                 return 1;
    6408             :         case 38:
    6409           0 :                 *AType = 0;
    6410           0 :                 *QType = 0;
    6411           0 :                 *b_min = FIX_MIN;
    6412           0 :                 *b_max = FIX_MAX;
    6413           0 :                 return 1;
    6414             :         case 39:
    6415           0 :                 *AType = 0;
    6416           0 :                 *QType = 0;
    6417           0 :                 *b_min = FIX_MIN;
    6418           0 :                 *b_max = FIX_MAX;
    6419           0 :                 return 1;
    6420             :         case 40:
    6421           0 :                 *AType = 0;
    6422           0 :                 *QType = 0;
    6423           0 :                 *b_min = FLT2FIX(0);
    6424           0 :                 *b_max = FIX_MAX;
    6425           0 :                 return 1;
    6426             :         case 41:
    6427           0 :                 *AType = 0;
    6428           0 :                 *QType = 0;
    6429           0 :                 *b_min = FLT2FIX(0);
    6430           0 :                 *b_max = FIX_MAX;
    6431           0 :                 return 1;
    6432             :         case 42:
    6433           0 :                 *AType = 0;
    6434           0 :                 *QType = 0;
    6435           0 :                 *b_min = FIX_MIN;
    6436           0 :                 *b_max = FIX_MAX;
    6437           0 :                 return 1;
    6438             :         case 43:
    6439           0 :                 *AType = 0;
    6440           0 :                 *QType = 0;
    6441           0 :                 *b_min = FIX_MIN;
    6442           0 :                 *b_max = FIX_MAX;
    6443           0 :                 return 1;
    6444             :         case 44:
    6445           0 :                 *AType = 0;
    6446           0 :                 *QType = 0;
    6447           0 :                 *b_min = FIX_MIN;
    6448           0 :                 *b_max = FIX_MAX;
    6449           0 :                 return 1;
    6450             :         case 45:
    6451           0 :                 *AType = 0;
    6452           0 :                 *QType = 0;
    6453           0 :                 *b_min = FIX_MIN;
    6454           0 :                 *b_max = FIX_MAX;
    6455           0 :                 return 1;
    6456             :         case 46:
    6457           0 :                 *AType = 0;
    6458           0 :                 *QType = 0;
    6459           0 :                 *b_min = FLT2FIX(0);
    6460           0 :                 *b_max = FIX_MAX;
    6461           0 :                 return 1;
    6462             :         case 47:
    6463           0 :                 *AType = 0;
    6464           0 :                 *QType = 0;
    6465           0 :                 *b_min = FIX_MIN;
    6466           0 :                 *b_max = FIX_MAX;
    6467           0 :                 return 1;
    6468             :         case 48:
    6469           0 :                 *AType = 0;
    6470           0 :                 *QType = 0;
    6471           0 :                 *b_min = FIX_MIN;
    6472           0 :                 *b_max = FIX_MAX;
    6473           0 :                 return 1;
    6474             :         case 49:
    6475           0 :                 *AType = 0;
    6476           0 :                 *QType = 0;
    6477           0 :                 *b_min = FIX_MIN;
    6478           0 :                 *b_max = FIX_MAX;
    6479           0 :                 return 1;
    6480             :         case 50:
    6481           0 :                 *AType = 0;
    6482           0 :                 *QType = 0;
    6483           0 :                 *b_min = FIX_MIN;
    6484           0 :                 *b_max = FIX_MAX;
    6485           0 :                 return 1;
    6486             :         case 51:
    6487           0 :                 *AType = 0;
    6488           0 :                 *QType = 0;
    6489           0 :                 *b_min = FIX_MIN;
    6490           0 :                 *b_max = FIX_MAX;
    6491           0 :                 return 1;
    6492             :         case 52:
    6493           0 :                 *AType = 0;
    6494           0 :                 *QType = 0;
    6495           0 :                 *b_min = FIX_MIN;
    6496           0 :                 *b_max = FIX_MAX;
    6497           0 :                 return 1;
    6498             :         case 53:
    6499           0 :                 *AType = 0;
    6500           0 :                 *QType = 0;
    6501           0 :                 *b_min = FIX_MIN;
    6502           0 :                 *b_max = FIX_MAX;
    6503           0 :                 return 1;
    6504             :         case 54:
    6505           0 :                 *AType = 0;
    6506           0 :                 *QType = 0;
    6507           0 :                 *b_min = FIX_MIN;
    6508           0 :                 *b_max = FIX_MAX;
    6509           0 :                 return 1;
    6510             :         case 55:
    6511           0 :                 *AType = 0;
    6512           0 :                 *QType = 0;
    6513           0 :                 *b_min = FIX_MIN;
    6514           0 :                 *b_max = FIX_MAX;
    6515           0 :                 return 1;
    6516             :         case 56:
    6517           0 :                 *AType = 0;
    6518           0 :                 *QType = 0;
    6519           0 :                 *b_min = FIX_MIN;
    6520           0 :                 *b_max = FIX_MAX;
    6521           0 :                 return 1;
    6522             :         case 57:
    6523           0 :                 *AType = 0;
    6524           0 :                 *QType = 0;
    6525           0 :                 *b_min = FIX_MIN;
    6526           0 :                 *b_max = FIX_MAX;
    6527           0 :                 return 1;
    6528             :         case 58:
    6529           0 :                 *AType = 0;
    6530           0 :                 *QType = 0;
    6531           0 :                 *b_min = FIX_MIN;
    6532           0 :                 *b_max = FIX_MAX;
    6533           0 :                 return 1;
    6534             :         case 59:
    6535           0 :                 *AType = 0;
    6536           0 :                 *QType = 0;
    6537           0 :                 *b_min = FIX_MIN;
    6538           0 :                 *b_max = FIX_MAX;
    6539           0 :                 return 1;
    6540             :         case 60:
    6541           0 :                 *AType = 0;
    6542           0 :                 *QType = 0;
    6543           0 :                 *b_min = FIX_MIN;
    6544           0 :                 *b_max = FIX_MAX;
    6545           0 :                 return 1;
    6546             :         case 61:
    6547           0 :                 *AType = 0;
    6548           0 :                 *QType = 0;
    6549           0 :                 *b_min = FIX_MIN;
    6550           0 :                 *b_max = FIX_MAX;
    6551           0 :                 return 1;
    6552             :         case 62:
    6553           0 :                 *AType = 0;
    6554           0 :                 *QType = 0;
    6555           0 :                 *b_min = FIX_MIN;
    6556           0 :                 *b_max = FIX_MAX;
    6557           0 :                 return 1;
    6558             :         case 63:
    6559           0 :                 *AType = 0;
    6560           0 :                 *QType = 0;
    6561           0 :                 *b_min = FIX_MIN;
    6562           0 :                 *b_max = FIX_MAX;
    6563           0 :                 return 1;
    6564             :         case 64:
    6565           0 :                 *AType = 0;
    6566           0 :                 *QType = 0;
    6567           0 :                 *b_min = FIX_MIN;
    6568           0 :                 *b_max = FIX_MAX;
    6569           0 :                 return 1;
    6570             :         case 65:
    6571           0 :                 *AType = 0;
    6572           0 :                 *QType = 0;
    6573           0 :                 *b_min = FIX_MIN;
    6574           0 :                 *b_max = FIX_MAX;
    6575           0 :                 return 1;
    6576             :         case 66:
    6577           0 :                 *AType = 0;
    6578           0 :                 *QType = 0;
    6579           0 :                 *b_min = FIX_MIN;
    6580           0 :                 *b_max = FIX_MAX;
    6581           0 :                 return 1;
    6582             :         case 67:
    6583           0 :                 *AType = 0;
    6584           0 :                 *QType = 0;
    6585           0 :                 *b_min = FIX_MIN;
    6586           0 :                 *b_max = FIX_MAX;
    6587           0 :                 return 1;
    6588             :         default:
    6589           0 :                 return 0;
    6590             :         }
    6591           0 : }
    6592             : 
    6593             : 
    6594             : 
    6595             : GF_Node *FAP_Create()
    6596             : {
    6597             :         M_FAP *p;
    6598           0 :         GF_SAFEALLOC(p, M_FAP);
    6599           0 :         if(!p) return NULL;
    6600           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FAP);
    6601             : 
    6602             :         /*default field values*/
    6603           0 :         p->open_jaw = 1 << 31;
    6604           0 :         p->lower_t_midlip = 1 << 31;
    6605           0 :         p->raise_b_midlip = 1 << 31;
    6606           0 :         p->stretch_l_corner = 1 << 31;
    6607           0 :         p->stretch_r_corner = 1 << 31;
    6608           0 :         p->lower_t_lip_lm = 1 << 31;
    6609           0 :         p->lower_t_lip_rm = 1 << 31;
    6610           0 :         p->lower_b_lip_lm = 1 << 31;
    6611           0 :         p->lower_b_lip_rm = 1 << 31;
    6612           0 :         p->raise_l_cornerlip = 1 << 31;
    6613           0 :         p->raise_r_cornerlip = 1 << 31;
    6614           0 :         p->thrust_jaw = 1 << 31;
    6615           0 :         p->shift_jaw = 1 << 31;
    6616           0 :         p->push_b_lip = 1 << 31;
    6617           0 :         p->push_t_lip = 1 << 31;
    6618           0 :         p->depress_chin = 1 << 31;
    6619           0 :         p->close_t_l_eyelid = 1 << 31;
    6620           0 :         p->close_t_r_eyelid = 1 << 31;
    6621           0 :         p->close_b_l_eyelid = 1 << 31;
    6622           0 :         p->close_b_r_eyelid = 1 << 31;
    6623           0 :         p->yaw_l_eyeball = 1 << 31;
    6624           0 :         p->yaw_r_eyeball = 1 << 31;
    6625           0 :         p->pitch_l_eyeball = 1 << 31;
    6626           0 :         p->pitch_r_eyeball = 1 << 31;
    6627           0 :         p->thrust_l_eyeball = 1 << 31;
    6628           0 :         p->thrust_r_eyeball = 1 << 31;
    6629           0 :         p->dilate_l_pupil = 1 << 31;
    6630           0 :         p->dilate_r_pupil = 1 << 31;
    6631           0 :         p->raise_l_i_eyebrow = 1 << 31;
    6632           0 :         p->raise_r_i_eyebrow = 1 << 31;
    6633           0 :         p->raise_l_m_eyebrow = 1 << 31;
    6634           0 :         p->raise_r_m_eyebrow = 1 << 31;
    6635           0 :         p->raise_l_o_eyebrow = 1 << 31;
    6636           0 :         p->raise_r_o_eyebrow = 1 << 31;
    6637           0 :         p->squeeze_l_eyebrow = 1 << 31;
    6638           0 :         p->squeeze_r_eyebrow = 1 << 31;
    6639           0 :         p->puff_l_cheek = 1 << 31;
    6640           0 :         p->puff_r_cheek = 1 << 31;
    6641           0 :         p->lift_l_cheek = 1 << 31;
    6642           0 :         p->lift_r_cheek = 1 << 31;
    6643           0 :         p->shift_tongue_tip = 1 << 31;
    6644           0 :         p->raise_tongue_tip = 1 << 31;
    6645           0 :         p->thrust_tongue_tip = 1 << 31;
    6646           0 :         p->raise_tongue = 1 << 31;
    6647           0 :         p->tongue_roll = 1 << 31;
    6648           0 :         p->head_pitch = 1 << 31;
    6649           0 :         p->head_yaw = 1 << 31;
    6650           0 :         p->head_roll = 1 << 31;
    6651           0 :         p->lower_t_midlip_o = 1 << 31;
    6652           0 :         p->raise_b_midlip_o = 1 << 31;
    6653           0 :         p->stretch_l_cornerlip = 1 << 31;
    6654           0 :         p->stretch_r_cornerlip = 1 << 31;
    6655           0 :         p->lower_t_lip_lm_o = 1 << 31;
    6656           0 :         p->lower_t_lip_rm_o = 1 << 31;
    6657           0 :         p->raise_b_lip_lm_o = 1 << 31;
    6658           0 :         p->raise_b_lip_rm_o = 1 << 31;
    6659           0 :         p->raise_l_cornerlip_o = 1 << 31;
    6660           0 :         p->raise_r_cornerlip_o = 1 << 31;
    6661           0 :         p->stretch_l_nose = 1 << 31;
    6662           0 :         p->stretch_r_nose = 1 << 31;
    6663           0 :         p->raise_nose = 1 << 31;
    6664           0 :         p->bend_nose = 1 << 31;
    6665           0 :         p->raise_l_ear = 1 << 31;
    6666           0 :         p->raise_r_ear = 1 << 31;
    6667           0 :         p->pull_l_ear = 1 << 31;
    6668           0 :         p->pull_r_ear = 1 << 31;
    6669           0 :         return (GF_Node *)p;
    6670           0 : }
    6671             : 
    6672             : 
    6673             : /*
    6674             :         FDP Node deletion
    6675             : */
    6676             : 
    6677             : static void FDP_Del(GF_Node *node)
    6678             : {
    6679           0 :         M_FDP *p = (M_FDP *) node;
    6680           0 :         gf_node_unregister((GF_Node *) p->featurePointsCoord, (GF_Node *) p);
    6681           0 :         gf_node_unregister((GF_Node *) p->textureCoord, (GF_Node *) p);
    6682           0 :         gf_node_unregister_children((GF_Node *) p, p->faceDefTables);
    6683           0 :         gf_node_unregister_children((GF_Node *) p, p->faceSceneGraph);
    6684           0 :         gf_node_free((GF_Node *) p);
    6685           0 : }
    6686             : 
    6687             : static const u16 FDP_Def2All[] = { 0, 1, 2, 3, 4};
    6688             : static const u16 FDP_In2All[] = { 0, 1, 2, 3};
    6689             : static const u16 FDP_Out2All[] = { 0, 1, 2, 3};
    6690             : 
    6691             : static u32 FDP_get_field_count(GF_Node *node, u8 IndexMode)
    6692             : {
    6693           0 :         switch(IndexMode) {
    6694             :         case GF_SG_FIELD_CODING_IN:
    6695           0 :                 return 4;
    6696             :         case GF_SG_FIELD_CODING_DEF:
    6697           0 :                 return 5;
    6698             :         case GF_SG_FIELD_CODING_OUT:
    6699           0 :                 return 4;
    6700             :         case GF_SG_FIELD_CODING_DYN:
    6701           0 :                 return 0;
    6702             :         default:
    6703           0 :                 return 5;
    6704             :         }
    6705           0 : }
    6706             : 
    6707             : static GF_Err FDP_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    6708             : {
    6709           0 :         switch(IndexMode) {
    6710             :         case GF_SG_FIELD_CODING_IN:
    6711           0 :                 *allField = FDP_In2All[inField];
    6712           0 :                 return GF_OK;
    6713             :         case GF_SG_FIELD_CODING_DEF:
    6714           0 :                 *allField = FDP_Def2All[inField];
    6715           0 :                 return GF_OK;
    6716             :         case GF_SG_FIELD_CODING_OUT:
    6717           0 :                 *allField = FDP_Out2All[inField];
    6718           0 :                 return GF_OK;
    6719             :         default:
    6720           0 :                 return GF_BAD_PARAM;
    6721             :         }
    6722           0 : }
    6723             : static GF_Err FDP_get_field(GF_Node *node, GF_FieldInfo *info)
    6724             : {
    6725           0 :         switch (info->fieldIndex) {
    6726             :         case 0:
    6727           0 :                 info->name = "featurePointsCoord";
    6728           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6729           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    6730           0 :                 info->NDTtype = NDT_SFCoordinateNode;
    6731           0 :                 info->far_ptr = & ((M_FDP *)node)->featurePointsCoord;
    6732           0 :                 return GF_OK;
    6733             :         case 1:
    6734           0 :                 info->name = "textureCoord";
    6735           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6736           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
    6737           0 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
    6738           0 :                 info->far_ptr = & ((M_FDP *)node)->textureCoord;
    6739           0 :                 return GF_OK;
    6740             :         case 2:
    6741           0 :                 info->name = "faceDefTables";
    6742           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6743           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    6744           0 :                 info->NDTtype = NDT_SFFaceDefTablesNode;
    6745           0 :                 info->far_ptr = & ((M_FDP *)node)->faceDefTables;
    6746           0 :                 return GF_OK;
    6747             :         case 3:
    6748           0 :                 info->name = "faceSceneGraph";
    6749           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6750           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
    6751           0 :                 info->NDTtype = NDT_SF3DNode;
    6752           0 :                 info->far_ptr = & ((M_FDP *)node)->faceSceneGraph;
    6753           0 :                 return GF_OK;
    6754             :         case 4:
    6755           0 :                 info->name = "useOrthoTexture";
    6756           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    6757           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    6758           0 :                 info->far_ptr = & ((M_FDP *) node)->useOrthoTexture;
    6759           0 :                 return GF_OK;
    6760             :         default:
    6761           0 :                 return GF_BAD_PARAM;
    6762             :         }
    6763           0 : }
    6764             : 
    6765             : 
    6766             : static s32 FDP_get_field_index_by_name(char *name)
    6767             : {
    6768           0 :         if (!strcmp("featurePointsCoord", name)) return 0;
    6769           0 :         if (!strcmp("textureCoord", name)) return 1;
    6770           0 :         if (!strcmp("faceDefTables", name)) return 2;
    6771           0 :         if (!strcmp("faceSceneGraph", name)) return 3;
    6772           0 :         if (!strcmp("useOrthoTexture", name)) return 4;
    6773           0 :         return -1;
    6774           0 : }
    6775             : static Bool FDP_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    6776             : {
    6777             :         switch (FieldIndex) {
    6778             :         default:
    6779           0 :                 return 0;
    6780             :         }
    6781             : }
    6782             : 
    6783             : 
    6784             : 
    6785             : GF_Node *FDP_Create()
    6786             : {
    6787             :         M_FDP *p;
    6788           0 :         GF_SAFEALLOC(p, M_FDP);
    6789           0 :         if(!p) return NULL;
    6790           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FDP);
    6791             : 
    6792             :         /*default field values*/
    6793           0 :         return (GF_Node *)p;
    6794           0 : }
    6795             : 
    6796             : 
    6797             : /*
    6798             :         FIT Node deletion
    6799             : */
    6800             : 
    6801             : static void FIT_Del(GF_Node *node)
    6802             : {
    6803           0 :         M_FIT *p = (M_FIT *) node;
    6804           0 :         gf_sg_mfint32_del(p->FAPs);
    6805           0 :         gf_sg_mfint32_del(p->Graph);
    6806           0 :         gf_sg_mfint32_del(p->numeratorExp);
    6807           0 :         gf_sg_mfint32_del(p->denominatorExp);
    6808           0 :         gf_sg_mfint32_del(p->numeratorImpulse);
    6809           0 :         gf_sg_mfint32_del(p->numeratorTerms);
    6810           0 :         gf_sg_mfint32_del(p->denominatorTerms);
    6811           0 :         gf_sg_mffloat_del(p->numeratorCoefs);
    6812           0 :         gf_sg_mffloat_del(p->denominatorCoefs);
    6813           0 :         gf_node_free((GF_Node *) p);
    6814           0 : }
    6815             : 
    6816             : static const u16 FIT_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    6817             : static const u16 FIT_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    6818             : static const u16 FIT_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    6819             : 
    6820             : static u32 FIT_get_field_count(GF_Node *node, u8 IndexMode)
    6821             : {
    6822           0 :         switch(IndexMode) {
    6823             :         case GF_SG_FIELD_CODING_IN:
    6824           0 :                 return 9;
    6825             :         case GF_SG_FIELD_CODING_DEF:
    6826           0 :                 return 9;
    6827             :         case GF_SG_FIELD_CODING_OUT:
    6828           0 :                 return 9;
    6829             :         case GF_SG_FIELD_CODING_DYN:
    6830           0 :                 return 0;
    6831             :         default:
    6832           0 :                 return 9;
    6833             :         }
    6834           0 : }
    6835             : 
    6836             : static GF_Err FIT_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    6837             : {
    6838           0 :         switch(IndexMode) {
    6839             :         case GF_SG_FIELD_CODING_IN:
    6840           0 :                 *allField = FIT_In2All[inField];
    6841           0 :                 return GF_OK;
    6842             :         case GF_SG_FIELD_CODING_DEF:
    6843           0 :                 *allField = FIT_Def2All[inField];
    6844           0 :                 return GF_OK;
    6845             :         case GF_SG_FIELD_CODING_OUT:
    6846           0 :                 *allField = FIT_Out2All[inField];
    6847           0 :                 return GF_OK;
    6848             :         default:
    6849           0 :                 return GF_BAD_PARAM;
    6850             :         }
    6851           0 : }
    6852             : static GF_Err FIT_get_field(GF_Node *node, GF_FieldInfo *info)
    6853             : {
    6854           0 :         switch (info->fieldIndex) {
    6855             :         case 0:
    6856           0 :                 info->name = "FAPs";
    6857           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6858           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6859           0 :                 info->far_ptr = & ((M_FIT *) node)->FAPs;
    6860           0 :                 return GF_OK;
    6861             :         case 1:
    6862           0 :                 info->name = "Graph";
    6863           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6864           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6865           0 :                 info->far_ptr = & ((M_FIT *) node)->Graph;
    6866           0 :                 return GF_OK;
    6867             :         case 2:
    6868           0 :                 info->name = "numeratorExp";
    6869           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6870           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6871           0 :                 info->far_ptr = & ((M_FIT *) node)->numeratorExp;
    6872           0 :                 return GF_OK;
    6873             :         case 3:
    6874           0 :                 info->name = "denominatorExp";
    6875           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6876           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6877           0 :                 info->far_ptr = & ((M_FIT *) node)->denominatorExp;
    6878           0 :                 return GF_OK;
    6879             :         case 4:
    6880           0 :                 info->name = "numeratorImpulse";
    6881           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6882           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6883           0 :                 info->far_ptr = & ((M_FIT *) node)->numeratorImpulse;
    6884           0 :                 return GF_OK;
    6885             :         case 5:
    6886           0 :                 info->name = "numeratorTerms";
    6887           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6888           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6889           0 :                 info->far_ptr = & ((M_FIT *) node)->numeratorTerms;
    6890           0 :                 return GF_OK;
    6891             :         case 6:
    6892           0 :                 info->name = "denominatorTerms";
    6893           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6894           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6895           0 :                 info->far_ptr = & ((M_FIT *) node)->denominatorTerms;
    6896           0 :                 return GF_OK;
    6897             :         case 7:
    6898           0 :                 info->name = "numeratorCoefs";
    6899           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6900           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    6901           0 :                 info->far_ptr = & ((M_FIT *) node)->numeratorCoefs;
    6902           0 :                 return GF_OK;
    6903             :         case 8:
    6904           0 :                 info->name = "denominatorCoefs";
    6905           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6906           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    6907           0 :                 info->far_ptr = & ((M_FIT *) node)->denominatorCoefs;
    6908           0 :                 return GF_OK;
    6909             :         default:
    6910           0 :                 return GF_BAD_PARAM;
    6911             :         }
    6912           0 : }
    6913             : 
    6914             : 
    6915             : static s32 FIT_get_field_index_by_name(char *name)
    6916             : {
    6917           0 :         if (!strcmp("FAPs", name)) return 0;
    6918           0 :         if (!strcmp("Graph", name)) return 1;
    6919           0 :         if (!strcmp("numeratorExp", name)) return 2;
    6920           0 :         if (!strcmp("denominatorExp", name)) return 3;
    6921           0 :         if (!strcmp("numeratorImpulse", name)) return 4;
    6922           0 :         if (!strcmp("numeratorTerms", name)) return 5;
    6923           0 :         if (!strcmp("denominatorTerms", name)) return 6;
    6924           0 :         if (!strcmp("numeratorCoefs", name)) return 7;
    6925           0 :         if (!strcmp("denominatorCoefs", name)) return 8;
    6926           0 :         return -1;
    6927           0 : }
    6928             : static Bool FIT_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    6929             : {
    6930           0 :         switch (FieldIndex) {
    6931             :         case 0:
    6932           0 :                 *AType = 0;
    6933           0 :                 *QType = 13;
    6934           0 :                 *QT13_bits = 7;
    6935           0 :                 *b_min = FLT2FIX(-1);
    6936           0 :                 *b_max = FLT2FIX(68);
    6937           0 :                 return 1;
    6938             :         case 1:
    6939           0 :                 *AType = 0;
    6940           0 :                 *QType = 13;
    6941           0 :                 *QT13_bits = 7;
    6942           0 :                 *b_min = FLT2FIX(0);
    6943           0 :                 *b_max = FLT2FIX(68);
    6944           0 :                 return 1;
    6945             :         case 2:
    6946           0 :                 *AType = 0;
    6947           0 :                 *QType = 13;
    6948           0 :                 *QT13_bits = 4;
    6949           0 :                 *b_min = FLT2FIX(0);
    6950           0 :                 *b_max = FLT2FIX(15);
    6951           0 :                 return 1;
    6952             :         case 3:
    6953           0 :                 *AType = 0;
    6954           0 :                 *QType = 13;
    6955           0 :                 *QT13_bits = 4;
    6956           0 :                 *b_min = FLT2FIX(0);
    6957           0 :                 *b_max = FLT2FIX(15);
    6958           0 :                 return 1;
    6959             :         case 4:
    6960           0 :                 *AType = 0;
    6961           0 :                 *QType = 13;
    6962           0 :                 *QT13_bits = 10;
    6963           0 :                 *b_min = FLT2FIX(0);
    6964           0 :                 *b_max = FLT2FIX(1023);
    6965           0 :                 return 1;
    6966             :         case 5:
    6967           0 :                 *AType = 0;
    6968           0 :                 *QType = 13;
    6969           0 :                 *QT13_bits = 4;
    6970           0 :                 *b_min = FLT2FIX(0);
    6971           0 :                 *b_max = FLT2FIX(10);
    6972           0 :                 return 1;
    6973             :         case 6:
    6974           0 :                 *AType = 0;
    6975           0 :                 *QType = 13;
    6976           0 :                 *QT13_bits = 4;
    6977           0 :                 *b_min = FLT2FIX(0);
    6978           0 :                 *b_max = FLT2FIX(10);
    6979           0 :                 return 1;
    6980             :         default:
    6981           0 :                 return 0;
    6982             :         }
    6983           0 : }
    6984             : 
    6985             : 
    6986             : 
    6987             : GF_Node *FIT_Create()
    6988             : {
    6989             :         M_FIT *p;
    6990           0 :         GF_SAFEALLOC(p, M_FIT);
    6991           0 :         if(!p) return NULL;
    6992           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FIT);
    6993             : 
    6994             :         /*default field values*/
    6995           0 :         return (GF_Node *)p;
    6996           0 : }
    6997             : 
    6998             : 
    6999             : /*
    7000             :         Fog Node deletion
    7001             : */
    7002             : 
    7003             : static void Fog_Del(GF_Node *node)
    7004             : {
    7005          36 :         M_Fog *p = (M_Fog *) node;
    7006          18 :         gf_sg_sfstring_del(p->fogType);
    7007          18 :         gf_node_free((GF_Node *) p);
    7008          18 : }
    7009             : 
    7010             : static const u16 Fog_Def2All[] = { 0, 1, 2};
    7011             : static const u16 Fog_In2All[] = { 0, 1, 2, 3};
    7012             : static const u16 Fog_Out2All[] = { 0, 1, 2, 4};
    7013             : static const u16 Fog_Dyn2All[] = { 0, 2};
    7014             : 
    7015             : static u32 Fog_get_field_count(GF_Node *node, u8 IndexMode)
    7016             : {
    7017          68 :         switch(IndexMode) {
    7018             :         case GF_SG_FIELD_CODING_IN:
    7019          18 :                 return 4;
    7020             :         case GF_SG_FIELD_CODING_DEF:
    7021           9 :                 return 3;
    7022             :         case GF_SG_FIELD_CODING_OUT:
    7023           0 :                 return 4;
    7024             :         case GF_SG_FIELD_CODING_DYN:
    7025           0 :                 return 2;
    7026             :         default:
    7027           7 :                 return 5;
    7028             :         }
    7029          34 : }
    7030             : 
    7031             : static GF_Err Fog_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7032             : {
    7033          80 :         switch(IndexMode) {
    7034             :         case GF_SG_FIELD_CODING_IN:
    7035          24 :                 *allField = Fog_In2All[inField];
    7036          24 :                 return GF_OK;
    7037             :         case GF_SG_FIELD_CODING_DEF:
    7038          16 :                 *allField = Fog_Def2All[inField];
    7039          16 :                 return GF_OK;
    7040             :         case GF_SG_FIELD_CODING_OUT:
    7041           0 :                 *allField = Fog_Out2All[inField];
    7042           0 :                 return GF_OK;
    7043             :         case GF_SG_FIELD_CODING_DYN:
    7044           0 :                 *allField = Fog_Dyn2All[inField];
    7045           0 :                 return GF_OK;
    7046             :         default:
    7047           0 :                 return GF_BAD_PARAM;
    7048             :         }
    7049          40 : }
    7050             : static GF_Err Fog_get_field(GF_Node *node, GF_FieldInfo *info)
    7051             : {
    7052         228 :         switch (info->fieldIndex) {
    7053             :         case 0:
    7054          33 :                 info->name = "color";
    7055          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7056          33 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    7057          33 :                 info->far_ptr = & ((M_Fog *) node)->color;
    7058          33 :                 return GF_OK;
    7059             :         case 1:
    7060          18 :                 info->name = "fogType";
    7061          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7062          18 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    7063          18 :                 info->far_ptr = & ((M_Fog *) node)->fogType;
    7064          18 :                 return GF_OK;
    7065             :         case 2:
    7066          41 :                 info->name = "visibilityRange";
    7067          41 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7068          41 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    7069          41 :                 info->far_ptr = & ((M_Fog *) node)->visibilityRange;
    7070          41 :                 return GF_OK;
    7071             :         case 3:
    7072          15 :                 info->name = "set_bind";
    7073          15 :                 info->eventType = GF_SG_EVENT_IN;
    7074          15 :                 info->on_event_in = ((M_Fog *)node)->on_set_bind;
    7075          15 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7076          15 :                 info->far_ptr = & ((M_Fog *) node)->set_bind;
    7077          15 :                 return GF_OK;
    7078             :         case 4:
    7079           7 :                 info->name = "isBound";
    7080           7 :                 info->eventType = GF_SG_EVENT_OUT;
    7081           7 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7082           7 :                 info->far_ptr = & ((M_Fog *) node)->isBound;
    7083           7 :                 return GF_OK;
    7084             :         default:
    7085           0 :                 return GF_BAD_PARAM;
    7086             :         }
    7087         114 : }
    7088             : 
    7089             : 
    7090             : static s32 Fog_get_field_index_by_name(char *name)
    7091             : {
    7092          36 :         if (!strcmp("color", name)) return 0;
    7093          12 :         if (!strcmp("fogType", name)) return 1;
    7094          20 :         if (!strcmp("visibilityRange", name)) return 2;
    7095           8 :         if (!strcmp("set_bind", name)) return 3;
    7096           0 :         if (!strcmp("isBound", name)) return 4;
    7097           0 :         return -1;
    7098          16 : }
    7099             : static Bool Fog_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7100             : {
    7101           0 :         switch (FieldIndex) {
    7102             :         case 0:
    7103           0 :                 *AType = 4;
    7104           0 :                 *QType = 4;
    7105           0 :                 *b_min = FLT2FIX(0);
    7106           0 :                 *b_max = FLT2FIX(1);
    7107           0 :                 return 1;
    7108             :         case 2:
    7109           0 :                 *AType = 7;
    7110           0 :                 *QType = 11;
    7111           0 :                 *b_min = FLT2FIX(0);
    7112           0 :                 *b_max = FIX_MAX;
    7113           0 :                 return 1;
    7114             :         default:
    7115           0 :                 return 0;
    7116             :         }
    7117           0 : }
    7118             : 
    7119             : 
    7120             : 
    7121             : GF_Node *Fog_Create()
    7122             : {
    7123             :         M_Fog *p;
    7124          54 :         GF_SAFEALLOC(p, M_Fog);
    7125          18 :         if(!p) return NULL;
    7126          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Fog);
    7127             : 
    7128             :         /*default field values*/
    7129          18 :         p->color.red = FLT2FIX(1);
    7130          18 :         p->color.green = FLT2FIX(1);
    7131          18 :         p->color.blue = FLT2FIX(1);
    7132          18 :         p->fogType.buffer = (char*)gf_malloc(sizeof(char) * 7);
    7133          18 :         strcpy(p->fogType.buffer, "LINEAR");
    7134          18 :         p->visibilityRange = FLT2FIX(0);
    7135          18 :         return (GF_Node *)p;
    7136          18 : }
    7137             : 
    7138             : 
    7139             : /*
    7140             :         FontStyle Node deletion
    7141             : */
    7142             : 
    7143             : static void FontStyle_Del(GF_Node *node)
    7144             : {
    7145       15672 :         M_FontStyle *p = (M_FontStyle *) node;
    7146        7836 :         gf_sg_mfstring_del(p->family);
    7147        7836 :         gf_sg_mfstring_del(p->justify);
    7148        7836 :         gf_sg_sfstring_del(p->language);
    7149        7836 :         gf_sg_sfstring_del(p->style);
    7150        7836 :         gf_node_free((GF_Node *) p);
    7151        7836 : }
    7152             : 
    7153             : static const u16 FontStyle_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    7154             : static const u16 FontStyle_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    7155             : static const u16 FontStyle_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    7156             : 
    7157             : static u32 FontStyle_get_field_count(GF_Node *node, u8 IndexMode)
    7158             : {
    7159       13138 :         switch(IndexMode) {
    7160             :         case GF_SG_FIELD_CODING_IN:
    7161          72 :                 return 9;
    7162             :         case GF_SG_FIELD_CODING_DEF:
    7163        2523 :                 return 9;
    7164             :         case GF_SG_FIELD_CODING_OUT:
    7165           0 :                 return 9;
    7166             :         case GF_SG_FIELD_CODING_DYN:
    7167           0 :                 return 0;
    7168             :         default:
    7169        3974 :                 return 9;
    7170             :         }
    7171        6569 : }
    7172             : 
    7173             : static GF_Err FontStyle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7174             : {
    7175       17760 :         switch(IndexMode) {
    7176             :         case GF_SG_FIELD_CODING_IN:
    7177         168 :                 *allField = FontStyle_In2All[inField];
    7178         168 :                 return GF_OK;
    7179             :         case GF_SG_FIELD_CODING_DEF:
    7180        8712 :                 *allField = FontStyle_Def2All[inField];
    7181        8712 :                 return GF_OK;
    7182             :         case GF_SG_FIELD_CODING_OUT:
    7183           0 :                 *allField = FontStyle_Out2All[inField];
    7184           0 :                 return GF_OK;
    7185             :         default:
    7186           0 :                 return GF_BAD_PARAM;
    7187             :         }
    7188        8880 : }
    7189             : static GF_Err FontStyle_get_field(GF_Node *node, GF_FieldInfo *info)
    7190             : {
    7191      185562 :         switch (info->fieldIndex) {
    7192             :         case 0:
    7193        9365 :                 info->name = "family";
    7194        9365 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7195        9365 :                 info->fieldType = GF_SG_VRML_MFSTRING;
    7196        9365 :                 info->far_ptr = & ((M_FontStyle *) node)->family;
    7197        9365 :                 return GF_OK;
    7198             :         case 1:
    7199        9653 :                 info->name = "horizontal";
    7200        9653 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7201        9653 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7202        9653 :                 info->far_ptr = & ((M_FontStyle *) node)->horizontal;
    7203        9653 :                 return GF_OK;
    7204             :         case 2:
    7205       13266 :                 info->name = "justify";
    7206       13266 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7207       13266 :                 info->fieldType = GF_SG_VRML_MFSTRING;
    7208       13266 :                 info->far_ptr = & ((M_FontStyle *) node)->justify;
    7209       13266 :                 return GF_OK;
    7210             :         case 3:
    7211        9068 :                 info->name = "language";
    7212        9068 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7213        9068 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    7214        9068 :                 info->far_ptr = & ((M_FontStyle *) node)->language;
    7215        9068 :                 return GF_OK;
    7216             :         case 4:
    7217        9818 :                 info->name = "leftToRight";
    7218        9818 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7219        9818 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7220        9818 :                 info->far_ptr = & ((M_FontStyle *) node)->leftToRight;
    7221        9818 :                 return GF_OK;
    7222             :         case 5:
    7223       13316 :                 info->name = "size";
    7224       13316 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7225       13316 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    7226       13316 :                 info->far_ptr = & ((M_FontStyle *) node)->size;
    7227       13316 :                 return GF_OK;
    7228             :         case 6:
    7229        9083 :                 info->name = "spacing";
    7230        9083 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7231        9083 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    7232        9083 :                 info->far_ptr = & ((M_FontStyle *) node)->spacing;
    7233        9083 :                 return GF_OK;
    7234             :         case 7:
    7235        9394 :                 info->name = "style";
    7236        9394 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7237        9394 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    7238        9394 :                 info->far_ptr = & ((M_FontStyle *) node)->style;
    7239        9394 :                 return GF_OK;
    7240             :         case 8:
    7241        9818 :                 info->name = "topToBottom";
    7242        9818 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7243        9818 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7244        9818 :                 info->far_ptr = & ((M_FontStyle *) node)->topToBottom;
    7245        9818 :                 return GF_OK;
    7246             :         default:
    7247           0 :                 return GF_BAD_PARAM;
    7248             :         }
    7249       92781 : }
    7250             : 
    7251             : 
    7252             : static s32 FontStyle_get_field_index_by_name(char *name)
    7253             : {
    7254        6179 :         if (!strcmp("family", name)) return 0;
    7255        3112 :         if (!strcmp("horizontal", name)) return 1;
    7256        3950 :         if (!strcmp("justify", name)) return 2;
    7257        1650 :         if (!strcmp("language", name)) return 3;
    7258        1850 :         if (!strcmp("leftToRight", name)) return 4;
    7259        2617 :         if (!strcmp("size", name)) return 5;
    7260         287 :         if (!strcmp("spacing", name)) return 6;
    7261         347 :         if (!strcmp("style", name)) return 7;
    7262         411 :         if (!strcmp("topToBottom", name)) return 8;
    7263          11 :         return -1;
    7264        3045 : }
    7265             : static Bool FontStyle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7266             : {
    7267           0 :         switch (FieldIndex) {
    7268             :         case 5:
    7269           0 :                 *AType = 0;
    7270           0 :                 *QType = 11;
    7271           0 :                 *b_min = FLT2FIX(0);
    7272           0 :                 *b_max = FIX_MAX;
    7273           0 :                 return 1;
    7274             :         case 6:
    7275           0 :                 *AType = 0;
    7276           0 :                 *QType = 11;
    7277           0 :                 *b_min = FLT2FIX(0);
    7278           0 :                 *b_max = FIX_MAX;
    7279           0 :                 return 1;
    7280             :         default:
    7281           0 :                 return 0;
    7282             :         }
    7283           0 : }
    7284             : 
    7285             : 
    7286             : 
    7287             : GF_Node *FontStyle_Create()
    7288             : {
    7289             :         M_FontStyle *p;
    7290       23508 :         GF_SAFEALLOC(p, M_FontStyle);
    7291        7836 :         if(!p) return NULL;
    7292        7836 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FontStyle);
    7293             : 
    7294             :         /*default field values*/
    7295        7836 :         p->family.vals = (char**)gf_malloc(sizeof(SFString)*1);
    7296        7836 :         p->family.count = 1;
    7297        7836 :         p->family.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
    7298        7836 :         strcpy(p->family.vals[0], "SERIF");
    7299        7836 :         p->horizontal = 1;
    7300        7836 :         p->justify.vals = (char**)gf_malloc(sizeof(SFString)*1);
    7301        7836 :         p->justify.count = 1;
    7302        7836 :         p->justify.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
    7303        7836 :         strcpy(p->justify.vals[0], "BEGIN");
    7304        7836 :         p->leftToRight = 1;
    7305        7836 :         p->size = FLT2FIX(1.0);
    7306        7836 :         p->spacing = FLT2FIX(1.0);
    7307        7836 :         p->style.buffer = (char*)gf_malloc(sizeof(char) * 6);
    7308        7836 :         strcpy(p->style.buffer, "PLAIN");
    7309        7836 :         p->topToBottom = 1;
    7310        7836 :         return (GF_Node *)p;
    7311        7836 : }
    7312             : 
    7313             : 
    7314             : /*
    7315             :         Form Node deletion
    7316             : */
    7317             : 
    7318             : static void Form_Del(GF_Node *node)
    7319             : {
    7320         570 :         M_Form *p = (M_Form *) node;
    7321         285 :         gf_sg_mfint32_del(p->groups);
    7322         285 :         gf_sg_mfstring_del(p->constraints);
    7323         285 :         gf_sg_mfint32_del(p->groupsIndex);
    7324         285 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    7325         285 :         gf_node_free((GF_Node *) p);
    7326         285 : }
    7327             : 
    7328             : static const u16 Form_Def2All[] = { 2, 3, 4, 5, 6};
    7329             : static const u16 Form_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
    7330             : static const u16 Form_Out2All[] = { 2, 3, 4, 5, 6};
    7331             : static const u16 Form_Dyn2All[] = { 3};
    7332             : 
    7333             : static u32 Form_get_field_count(GF_Node *node, u8 IndexMode)
    7334             : {
    7335         498 :         switch(IndexMode) {
    7336             :         case GF_SG_FIELD_CODING_IN:
    7337           0 :                 return 7;
    7338             :         case GF_SG_FIELD_CODING_DEF:
    7339         135 :                 return 5;
    7340             :         case GF_SG_FIELD_CODING_OUT:
    7341           0 :                 return 5;
    7342             :         case GF_SG_FIELD_CODING_DYN:
    7343           0 :                 return 1;
    7344             :         default:
    7345         114 :                 return 7;
    7346             :         }
    7347         249 : }
    7348             : 
    7349             : static GF_Err Form_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7350             : {
    7351        1050 :         switch(IndexMode) {
    7352             :         case GF_SG_FIELD_CODING_IN:
    7353           0 :                 *allField = Form_In2All[inField];
    7354           0 :                 return GF_OK;
    7355             :         case GF_SG_FIELD_CODING_DEF:
    7356         525 :                 *allField = Form_Def2All[inField];
    7357         525 :                 return GF_OK;
    7358             :         case GF_SG_FIELD_CODING_OUT:
    7359           0 :                 *allField = Form_Out2All[inField];
    7360           0 :                 return GF_OK;
    7361             :         case GF_SG_FIELD_CODING_DYN:
    7362           0 :                 *allField = Form_Dyn2All[inField];
    7363           0 :                 return GF_OK;
    7364             :         default:
    7365           0 :                 return GF_BAD_PARAM;
    7366             :         }
    7367         525 : }
    7368             : static GF_Err Form_get_field(GF_Node *node, GF_FieldInfo *info)
    7369             : {
    7370        5298 :         switch (info->fieldIndex) {
    7371             :         case 0:
    7372         114 :                 info->name = "addChildren";
    7373         114 :                 info->eventType = GF_SG_EVENT_IN;
    7374         114 :                 info->on_event_in = ((M_Form *)node)->on_addChildren;
    7375         114 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7376         114 :                 info->NDTtype = NDT_SF2DNode;
    7377         114 :                 info->far_ptr = & ((M_Form *)node)->addChildren;
    7378         114 :                 return GF_OK;
    7379             :         case 1:
    7380         114 :                 info->name = "removeChildren";
    7381         114 :                 info->eventType = GF_SG_EVENT_IN;
    7382         114 :                 info->on_event_in = ((M_Form *)node)->on_removeChildren;
    7383         114 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7384         114 :                 info->NDTtype = NDT_SF2DNode;
    7385         114 :                 info->far_ptr = & ((M_Form *)node)->removeChildren;
    7386         114 :                 return GF_OK;
    7387             :         case 2:
    7388         369 :                 info->name = "children";
    7389         369 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7390         369 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7391         369 :                 info->NDTtype = NDT_SF2DNode;
    7392         369 :                 info->far_ptr = & ((M_Form *)node)->children;
    7393         369 :                 return GF_OK;
    7394             :         case 3:
    7395         513 :                 info->name = "size";
    7396         513 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7397         513 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    7398         513 :                 info->far_ptr = & ((M_Form *) node)->size;
    7399         513 :                 return GF_OK;
    7400             :         case 4:
    7401         513 :                 info->name = "groups";
    7402         513 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7403         513 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7404         513 :                 info->far_ptr = & ((M_Form *) node)->groups;
    7405         513 :                 return GF_OK;
    7406             :         case 5:
    7407         513 :                 info->name = "constraints";
    7408         513 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7409         513 :                 info->fieldType = GF_SG_VRML_MFSTRING;
    7410         513 :                 info->far_ptr = & ((M_Form *) node)->constraints;
    7411         513 :                 return GF_OK;
    7412             :         case 6:
    7413         513 :                 info->name = "groupsIndex";
    7414         513 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7415         513 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7416         513 :                 info->far_ptr = & ((M_Form *) node)->groupsIndex;
    7417         513 :                 return GF_OK;
    7418             :         default:
    7419           0 :                 return GF_BAD_PARAM;
    7420             :         }
    7421        2649 : }
    7422             : 
    7423             : 
    7424             : static s32 Form_get_field_index_by_name(char *name)
    7425             : {
    7426         600 :         if (!strcmp("addChildren", name)) return 0;
    7427         300 :         if (!strcmp("removeChildren", name)) return 1;
    7428         360 :         if (!strcmp("children", name)) return 2;
    7429         300 :         if (!strcmp("size", name)) return 3;
    7430         240 :         if (!strcmp("groups", name)) return 4;
    7431         180 :         if (!strcmp("constraints", name)) return 5;
    7432         120 :         if (!strcmp("groupsIndex", name)) return 6;
    7433           0 :         return -1;
    7434         300 : }
    7435             : static Bool Form_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7436             : {
    7437           0 :         switch (FieldIndex) {
    7438             :         case 3:
    7439           0 :                 *AType = 12;
    7440           0 :                 *QType = 12;
    7441           0 :                 *b_min = FLT2FIX(0);
    7442           0 :                 *b_max = FIX_MAX;
    7443           0 :                 return 1;
    7444             :         case 4:
    7445           0 :                 *AType = 0;
    7446           0 :                 *QType = 13;
    7447           0 :                 *QT13_bits = 10;
    7448           0 :                 *b_min = FLT2FIX(-1);
    7449           0 :                 *b_max = FLT2FIX(1022);
    7450           0 :                 return 1;
    7451             :         case 6:
    7452           0 :                 *AType = 0;
    7453           0 :                 *QType = 13;
    7454           0 :                 *QT13_bits = 10;
    7455           0 :                 *b_min = FLT2FIX(-1);
    7456           0 :                 *b_max = FLT2FIX(1022);
    7457           0 :                 return 1;
    7458             :         default:
    7459           0 :                 return 0;
    7460             :         }
    7461           0 : }
    7462             : 
    7463             : 
    7464             : 
    7465             : GF_Node *Form_Create()
    7466             : {
    7467             :         M_Form *p;
    7468         855 :         GF_SAFEALLOC(p, M_Form);
    7469         285 :         if(!p) return NULL;
    7470         285 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Form);
    7471         285 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    7472             : 
    7473             :         /*default field values*/
    7474         285 :         p->size.x = FLT2FIX(-1);
    7475         285 :         p->size.y = FLT2FIX(-1);
    7476         285 :         return (GF_Node *)p;
    7477         285 : }
    7478             : 
    7479             : 
    7480             : /*
    7481             :         Group Node deletion
    7482             : */
    7483             : 
    7484             : static void Group_Del(GF_Node *node)
    7485             : {
    7486        2868 :         M_Group *p = (M_Group *) node;
    7487        1434 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    7488        1434 :         gf_node_free((GF_Node *) p);
    7489        1434 : }
    7490             : 
    7491             : static const u16 Group_Def2All[] = { 2};
    7492             : static const u16 Group_In2All[] = { 0, 1, 2};
    7493             : static const u16 Group_Out2All[] = { 2};
    7494             : 
    7495             : static u32 Group_get_field_count(GF_Node *node, u8 IndexMode)
    7496             : {
    7497        2532 :         switch(IndexMode) {
    7498             :         case GF_SG_FIELD_CODING_IN:
    7499           0 :                 return 3;
    7500             :         case GF_SG_FIELD_CODING_DEF:
    7501         702 :                 return 1;
    7502             :         case GF_SG_FIELD_CODING_OUT:
    7503           0 :                 return 1;
    7504             :         case GF_SG_FIELD_CODING_DYN:
    7505           0 :                 return 0;
    7506             :         default:
    7507         564 :                 return 3;
    7508             :         }
    7509        1266 : }
    7510             : 
    7511             : static GF_Err Group_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7512             : {
    7513        1092 :         switch(IndexMode) {
    7514             :         case GF_SG_FIELD_CODING_IN:
    7515           0 :                 *allField = Group_In2All[inField];
    7516           0 :                 return GF_OK;
    7517             :         case GF_SG_FIELD_CODING_DEF:
    7518         546 :                 *allField = Group_Def2All[inField];
    7519         546 :                 return GF_OK;
    7520             :         case GF_SG_FIELD_CODING_OUT:
    7521           0 :                 *allField = Group_Out2All[inField];
    7522           0 :                 return GF_OK;
    7523             :         default:
    7524           0 :                 return GF_BAD_PARAM;
    7525             :         }
    7526         546 : }
    7527             : static GF_Err Group_get_field(GF_Node *node, GF_FieldInfo *info)
    7528             : {
    7529        6036 :         switch (info->fieldIndex) {
    7530             :         case 0:
    7531         564 :                 info->name = "addChildren";
    7532         564 :                 info->eventType = GF_SG_EVENT_IN;
    7533         564 :                 info->on_event_in = ((M_Group *)node)->on_addChildren;
    7534         564 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7535         564 :                 info->NDTtype = NDT_SF3DNode;
    7536         564 :                 info->far_ptr = & ((M_Group *)node)->addChildren;
    7537         564 :                 return GF_OK;
    7538             :         case 1:
    7539         564 :                 info->name = "removeChildren";
    7540         564 :                 info->eventType = GF_SG_EVENT_IN;
    7541         564 :                 info->on_event_in = ((M_Group *)node)->on_removeChildren;
    7542         564 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7543         564 :                 info->NDTtype = NDT_SF3DNode;
    7544         564 :                 info->far_ptr = & ((M_Group *)node)->removeChildren;
    7545         564 :                 return GF_OK;
    7546             :         case 2:
    7547        1890 :                 info->name = "children";
    7548        1890 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7549        1890 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7550        1890 :                 info->NDTtype = NDT_SF3DNode;
    7551        1890 :                 info->far_ptr = & ((M_Group *)node)->children;
    7552        1890 :                 return GF_OK;
    7553             :         default:
    7554           0 :                 return GF_BAD_PARAM;
    7555             :         }
    7556        3018 : }
    7557             : 
    7558             : 
    7559             : static s32 Group_get_field_index_by_name(char *name)
    7560             : {
    7561         624 :         if (!strcmp("addChildren", name)) return 0;
    7562         312 :         if (!strcmp("removeChildren", name)) return 1;
    7563         624 :         if (!strcmp("children", name)) return 2;
    7564           0 :         return -1;
    7565         312 : }
    7566             : static Bool Group_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7567             : {
    7568             :         switch (FieldIndex) {
    7569             :         default:
    7570           0 :                 return 0;
    7571             :         }
    7572             : }
    7573             : 
    7574             : 
    7575             : 
    7576             : GF_Node *Group_Create()
    7577             : {
    7578             :         M_Group *p;
    7579        4302 :         GF_SAFEALLOC(p, M_Group);
    7580        1434 :         if(!p) return NULL;
    7581        1434 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Group);
    7582        1434 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    7583             : 
    7584             :         /*default field values*/
    7585        1434 :         return (GF_Node *)p;
    7586        1434 : }
    7587             : 
    7588             : 
    7589             : /*
    7590             :         ImageTexture Node deletion
    7591             : */
    7592             : 
    7593             : static void ImageTexture_Del(GF_Node *node)
    7594             : {
    7595        2000 :         M_ImageTexture *p = (M_ImageTexture *) node;
    7596        1000 :         gf_sg_mfurl_del(p->url);
    7597        1000 :         gf_node_free((GF_Node *) p);
    7598        1000 : }
    7599             : 
    7600             : static const u16 ImageTexture_Def2All[] = { 0, 1, 2};
    7601             : static const u16 ImageTexture_In2All[] = { 0};
    7602             : static const u16 ImageTexture_Out2All[] = { 0};
    7603             : 
    7604             : static u32 ImageTexture_get_field_count(GF_Node *node, u8 IndexMode)
    7605             : {
    7606        1886 :         switch(IndexMode) {
    7607             :         case GF_SG_FIELD_CODING_IN:
    7608          54 :                 return 1;
    7609             :         case GF_SG_FIELD_CODING_DEF:
    7610         381 :                 return 3;
    7611             :         case GF_SG_FIELD_CODING_OUT:
    7612           0 :                 return 1;
    7613             :         case GF_SG_FIELD_CODING_DYN:
    7614           0 :                 return 0;
    7615             :         default:
    7616         508 :                 return 3;
    7617             :         }
    7618         943 : }
    7619             : 
    7620             : static GF_Err ImageTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7621             : {
    7622        1198 :         switch(IndexMode) {
    7623             :         case GF_SG_FIELD_CODING_IN:
    7624          42 :                 *allField = ImageTexture_In2All[inField];
    7625          42 :                 return GF_OK;
    7626             :         case GF_SG_FIELD_CODING_DEF:
    7627         557 :                 *allField = ImageTexture_Def2All[inField];
    7628         557 :                 return GF_OK;
    7629             :         case GF_SG_FIELD_CODING_OUT:
    7630           0 :                 *allField = ImageTexture_Out2All[inField];
    7631           0 :                 return GF_OK;
    7632             :         default:
    7633           0 :                 return GF_BAD_PARAM;
    7634             :         }
    7635         599 : }
    7636             : static GF_Err ImageTexture_get_field(GF_Node *node, GF_FieldInfo *info)
    7637             : {
    7638        9046 :         switch (info->fieldIndex) {
    7639             :         case 0:
    7640        1887 :                 info->name = "url";
    7641        1887 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7642        1887 :                 info->fieldType = GF_SG_VRML_MFURL;
    7643        1887 :                 info->far_ptr = & ((M_ImageTexture *) node)->url;
    7644        1887 :                 return GF_OK;
    7645             :         case 1:
    7646        1318 :                 info->name = "repeatS";
    7647        1318 :                 info->eventType = GF_SG_EVENT_FIELD;
    7648        1318 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7649        1318 :                 info->far_ptr = & ((M_ImageTexture *) node)->repeatS;
    7650        1318 :                 return GF_OK;
    7651             :         case 2:
    7652        1318 :                 info->name = "repeatT";
    7653        1318 :                 info->eventType = GF_SG_EVENT_FIELD;
    7654        1318 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7655        1318 :                 info->far_ptr = & ((M_ImageTexture *) node)->repeatT;
    7656        1318 :                 return GF_OK;
    7657             :         default:
    7658           0 :                 return GF_BAD_PARAM;
    7659             :         }
    7660        4523 : }
    7661             : 
    7662             : 
    7663             : static s32 ImageTexture_get_field_index_by_name(char *name)
    7664             : {
    7665         739 :         if (!strcmp("url", name)) return 0;
    7666         120 :         if (!strcmp("repeatS", name)) return 1;
    7667          80 :         if (!strcmp("repeatT", name)) return 2;
    7668           0 :         return -1;
    7669         273 : }
    7670             : static Bool ImageTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7671             : {
    7672             :         switch (FieldIndex) {
    7673             :         default:
    7674           0 :                 return 0;
    7675             :         }
    7676             : }
    7677             : 
    7678             : 
    7679             : 
    7680             : GF_Node *ImageTexture_Create()
    7681             : {
    7682             :         M_ImageTexture *p;
    7683        3000 :         GF_SAFEALLOC(p, M_ImageTexture);
    7684        1000 :         if(!p) return NULL;
    7685        1000 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ImageTexture);
    7686             : 
    7687             :         /*default field values*/
    7688        1000 :         p->repeatS = 1;
    7689        1000 :         p->repeatT = 1;
    7690        1000 :         return (GF_Node *)p;
    7691        1000 : }
    7692             : 
    7693             : 
    7694             : /*
    7695             :         IndexedFaceSet Node deletion
    7696             : */
    7697             : 
    7698             : static void IndexedFaceSet_Del(GF_Node *node)
    7699             : {
    7700         114 :         M_IndexedFaceSet *p = (M_IndexedFaceSet *) node;
    7701          57 :         gf_sg_mfint32_del(p->set_colorIndex);
    7702          57 :         gf_sg_mfint32_del(p->set_coordIndex);
    7703          57 :         gf_sg_mfint32_del(p->set_normalIndex);
    7704          57 :         gf_sg_mfint32_del(p->set_texCoordIndex);
    7705          57 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    7706          57 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
    7707          57 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
    7708          57 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
    7709          57 :         gf_sg_mfint32_del(p->colorIndex);
    7710          57 :         gf_sg_mfint32_del(p->coordIndex);
    7711          57 :         gf_sg_mfint32_del(p->normalIndex);
    7712          57 :         gf_sg_mfint32_del(p->texCoordIndex);
    7713          57 :         gf_node_free((GF_Node *) p);
    7714          57 : }
    7715             : 
    7716             : static const u16 IndexedFaceSet_Def2All[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
    7717             : static const u16 IndexedFaceSet_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
    7718             : static const u16 IndexedFaceSet_Out2All[] = { 4, 5, 6, 7};
    7719             : 
    7720             : static u32 IndexedFaceSet_get_field_count(GF_Node *node, u8 IndexMode)
    7721             : {
    7722         102 :         switch(IndexMode) {
    7723             :         case GF_SG_FIELD_CODING_IN:
    7724           0 :                 return 8;
    7725             :         case GF_SG_FIELD_CODING_DEF:
    7726          27 :                 return 14;
    7727             :         case GF_SG_FIELD_CODING_OUT:
    7728           0 :                 return 4;
    7729             :         case GF_SG_FIELD_CODING_DYN:
    7730           0 :                 return 0;
    7731             :         default:
    7732          24 :                 return 18;
    7733             :         }
    7734          51 : }
    7735             : 
    7736             : static GF_Err IndexedFaceSet_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7737             : {
    7738         288 :         switch(IndexMode) {
    7739             :         case GF_SG_FIELD_CODING_IN:
    7740           0 :                 *allField = IndexedFaceSet_In2All[inField];
    7741           0 :                 return GF_OK;
    7742             :         case GF_SG_FIELD_CODING_DEF:
    7743         144 :                 *allField = IndexedFaceSet_Def2All[inField];
    7744         144 :                 return GF_OK;
    7745             :         case GF_SG_FIELD_CODING_OUT:
    7746           0 :                 *allField = IndexedFaceSet_Out2All[inField];
    7747           0 :                 return GF_OK;
    7748             :         default:
    7749           0 :                 return GF_BAD_PARAM;
    7750             :         }
    7751         144 : }
    7752             : static GF_Err IndexedFaceSet_get_field(GF_Node *node, GF_FieldInfo *info)
    7753             : {
    7754        2000 :         switch (info->fieldIndex) {
    7755             :         case 0:
    7756          24 :                 info->name = "set_colorIndex";
    7757          24 :                 info->eventType = GF_SG_EVENT_IN;
    7758          24 :                 info->on_event_in = ((M_IndexedFaceSet *)node)->on_set_colorIndex;
    7759          24 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7760          24 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->set_colorIndex;
    7761          24 :                 return GF_OK;
    7762             :         case 1:
    7763          24 :                 info->name = "set_coordIndex";
    7764          24 :                 info->eventType = GF_SG_EVENT_IN;
    7765          24 :                 info->on_event_in = ((M_IndexedFaceSet *)node)->on_set_coordIndex;
    7766          24 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7767          24 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->set_coordIndex;
    7768          24 :                 return GF_OK;
    7769             :         case 2:
    7770          24 :                 info->name = "set_normalIndex";
    7771          24 :                 info->eventType = GF_SG_EVENT_IN;
    7772          24 :                 info->on_event_in = ((M_IndexedFaceSet *)node)->on_set_normalIndex;
    7773          24 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7774          24 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->set_normalIndex;
    7775          24 :                 return GF_OK;
    7776             :         case 3:
    7777          24 :                 info->name = "set_texCoordIndex";
    7778          24 :                 info->eventType = GF_SG_EVENT_IN;
    7779          24 :                 info->on_event_in = ((M_IndexedFaceSet *)node)->on_set_texCoordIndex;
    7780          24 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7781          24 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->set_texCoordIndex;
    7782          24 :                 return GF_OK;
    7783             :         case 4:
    7784          60 :                 info->name = "color";
    7785          60 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7786          60 :                 info->fieldType = GF_SG_VRML_SFNODE;
    7787          60 :                 info->NDTtype = NDT_SFColorNode;
    7788          60 :                 info->far_ptr = & ((M_IndexedFaceSet *)node)->color;
    7789          60 :                 return GF_OK;
    7790             :         case 5:
    7791          75 :                 info->name = "coord";
    7792          75 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7793          75 :                 info->fieldType = GF_SG_VRML_SFNODE;
    7794          75 :                 info->NDTtype = NDT_SFCoordinateNode;
    7795          75 :                 info->far_ptr = & ((M_IndexedFaceSet *)node)->coord;
    7796          75 :                 return GF_OK;
    7797             :         case 6:
    7798          30 :                 info->name = "normal";
    7799          30 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7800          30 :                 info->fieldType = GF_SG_VRML_SFNODE;
    7801          30 :                 info->NDTtype = NDT_SFNormalNode;
    7802          30 :                 info->far_ptr = & ((M_IndexedFaceSet *)node)->normal;
    7803          30 :                 return GF_OK;
    7804             :         case 7:
    7805          30 :                 info->name = "texCoord";
    7806          30 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7807          30 :                 info->fieldType = GF_SG_VRML_SFNODE;
    7808          30 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
    7809          30 :                 info->far_ptr = & ((M_IndexedFaceSet *)node)->texCoord;
    7810          30 :                 return GF_OK;
    7811             :         case 8:
    7812          62 :                 info->name = "ccw";
    7813          62 :                 info->eventType = GF_SG_EVENT_FIELD;
    7814          62 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7815          62 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->ccw;
    7816          62 :                 return GF_OK;
    7817             :         case 9:
    7818          75 :                 info->name = "colorIndex";
    7819          75 :                 info->eventType = GF_SG_EVENT_FIELD;
    7820          75 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7821          75 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->colorIndex;
    7822          75 :                 return GF_OK;
    7823             :         case 10:
    7824          77 :                 info->name = "colorPerVertex";
    7825          77 :                 info->eventType = GF_SG_EVENT_FIELD;
    7826          77 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7827          77 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->colorPerVertex;
    7828          77 :                 return GF_OK;
    7829             :         case 11:
    7830          60 :                 info->name = "convex";
    7831          60 :                 info->eventType = GF_SG_EVENT_FIELD;
    7832          60 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7833          60 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->convex;
    7834          60 :                 return GF_OK;
    7835             :         case 12:
    7836         105 :                 info->name = "coordIndex";
    7837         105 :                 info->eventType = GF_SG_EVENT_FIELD;
    7838         105 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7839         105 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->coordIndex;
    7840         105 :                 return GF_OK;
    7841             :         case 13:
    7842          75 :                 info->name = "creaseAngle";
    7843          75 :                 info->eventType = GF_SG_EVENT_FIELD;
    7844          75 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    7845          75 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->creaseAngle;
    7846          75 :                 return GF_OK;
    7847             :         case 14:
    7848          60 :                 info->name = "normalIndex";
    7849          60 :                 info->eventType = GF_SG_EVENT_FIELD;
    7850          60 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7851          60 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->normalIndex;
    7852          60 :                 return GF_OK;
    7853             :         case 15:
    7854          60 :                 info->name = "normalPerVertex";
    7855          60 :                 info->eventType = GF_SG_EVENT_FIELD;
    7856          60 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7857          60 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->normalPerVertex;
    7858          60 :                 return GF_OK;
    7859             :         case 16:
    7860          75 :                 info->name = "solid";
    7861          75 :                 info->eventType = GF_SG_EVENT_FIELD;
    7862          75 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7863          75 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->solid;
    7864          75 :                 return GF_OK;
    7865             :         case 17:
    7866          60 :                 info->name = "texCoordIndex";
    7867          60 :                 info->eventType = GF_SG_EVENT_FIELD;
    7868          60 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7869          60 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->texCoordIndex;
    7870          60 :                 return GF_OK;
    7871             :         default:
    7872           0 :                 return GF_BAD_PARAM;
    7873             :         }
    7874        1000 : }
    7875             : 
    7876             : 
    7877             : static s32 IndexedFaceSet_get_field_index_by_name(char *name)
    7878             : {
    7879         104 :         if (!strcmp("set_colorIndex", name)) return 0;
    7880          52 :         if (!strcmp("set_coordIndex", name)) return 1;
    7881          52 :         if (!strcmp("set_normalIndex", name)) return 2;
    7882          52 :         if (!strcmp("set_texCoordIndex", name)) return 3;
    7883          60 :         if (!strcmp("color", name)) return 4;
    7884          56 :         if (!strcmp("coord", name)) return 5;
    7885          32 :         if (!strcmp("normal", name)) return 6;
    7886          32 :         if (!strcmp("texCoord", name)) return 7;
    7887          34 :         if (!strcmp("ccw", name)) return 8;
    7888          34 :         if (!strcmp("colorIndex", name)) return 9;
    7889          32 :         if (!strcmp("colorPerVertex", name)) return 10;
    7890          20 :         if (!strcmp("convex", name)) return 11;
    7891          32 :         if (!strcmp("coordIndex", name)) return 12;
    7892          12 :         if (!strcmp("creaseAngle", name)) return 13;
    7893           4 :         if (!strcmp("normalIndex", name)) return 14;
    7894           4 :         if (!strcmp("normalPerVertex", name)) return 15;
    7895           8 :         if (!strcmp("solid", name)) return 16;
    7896           0 :         if (!strcmp("texCoordIndex", name)) return 17;
    7897           0 :         return -1;
    7898          52 : }
    7899             : static Bool IndexedFaceSet_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7900             : {
    7901           0 :         switch (FieldIndex) {
    7902             :         case 9:
    7903           0 :                 *AType = 0;
    7904           0 :                 *QType = 14;
    7905           0 :                 *b_min = FLT2FIX(-1);
    7906           0 :                 *b_max = FIX_MAX;
    7907           0 :                 return 1;
    7908             :         case 12:
    7909           0 :                 *AType = 0;
    7910           0 :                 *QType = 14;
    7911           0 :                 *b_min = FLT2FIX(-1);
    7912           0 :                 *b_max = FIX_MAX;
    7913           0 :                 return 1;
    7914             :         case 13:
    7915           0 :                 *AType = 0;
    7916           0 :                 *QType = 6;
    7917           0 :                 *b_min = FLT2FIX(0);
    7918           0 :                 *b_max = FLT2FIX(6.2831853);
    7919           0 :                 return 1;
    7920             :         case 14:
    7921           0 :                 *AType = 0;
    7922           0 :                 *QType = 14;
    7923           0 :                 *b_min = FLT2FIX(-1);
    7924           0 :                 *b_max = FIX_MAX;
    7925           0 :                 return 1;
    7926             :         case 17:
    7927           0 :                 *AType = 0;
    7928           0 :                 *QType = 14;
    7929           0 :                 *b_min = FLT2FIX(-1);
    7930           0 :                 *b_max = FIX_MAX;
    7931           0 :                 return 1;
    7932             :         default:
    7933           0 :                 return 0;
    7934             :         }
    7935           0 : }
    7936             : 
    7937             : 
    7938             : 
    7939             : GF_Node *IndexedFaceSet_Create()
    7940             : {
    7941             :         M_IndexedFaceSet *p;
    7942         171 :         GF_SAFEALLOC(p, M_IndexedFaceSet);
    7943          57 :         if(!p) return NULL;
    7944          57 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_IndexedFaceSet);
    7945             : 
    7946             :         /*default field values*/
    7947          57 :         p->ccw = 1;
    7948          57 :         p->colorPerVertex = 1;
    7949          57 :         p->convex = 1;
    7950          57 :         p->creaseAngle = FLT2FIX(0.0);
    7951          57 :         p->normalPerVertex = 1;
    7952          57 :         p->solid = 1;
    7953          57 :         return (GF_Node *)p;
    7954          57 : }
    7955             : 
    7956             : 
    7957             : /*
    7958             :         IndexedFaceSet2D Node deletion
    7959             : */
    7960             : 
    7961             : static void IndexedFaceSet2D_Del(GF_Node *node)
    7962             : {
    7963        3058 :         M_IndexedFaceSet2D *p = (M_IndexedFaceSet2D *) node;
    7964        1529 :         gf_sg_mfint32_del(p->set_colorIndex);
    7965        1529 :         gf_sg_mfint32_del(p->set_coordIndex);
    7966        1529 :         gf_sg_mfint32_del(p->set_texCoordIndex);
    7967        1529 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    7968        1529 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
    7969        1529 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
    7970        1529 :         gf_sg_mfint32_del(p->colorIndex);
    7971        1529 :         gf_sg_mfint32_del(p->coordIndex);
    7972        1529 :         gf_sg_mfint32_del(p->texCoordIndex);
    7973        1529 :         gf_node_free((GF_Node *) p);
    7974        1529 : }
    7975             : 
    7976             : static const u16 IndexedFaceSet2D_Def2All[] = { 3, 4, 5, 6, 7, 8, 9, 10};
    7977             : static const u16 IndexedFaceSet2D_In2All[] = { 0, 1, 2, 3, 4, 5};
    7978             : static const u16 IndexedFaceSet2D_Out2All[] = { 3, 4, 5};
    7979             : 
    7980             : static u32 IndexedFaceSet2D_get_field_count(GF_Node *node, u8 IndexMode)
    7981             : {
    7982        2782 :         switch(IndexMode) {
    7983             :         case GF_SG_FIELD_CODING_IN:
    7984           0 :                 return 6;
    7985             :         case GF_SG_FIELD_CODING_DEF:
    7986         708 :                 return 8;
    7987             :         case GF_SG_FIELD_CODING_OUT:
    7988           0 :                 return 3;
    7989             :         case GF_SG_FIELD_CODING_DYN:
    7990           0 :                 return 0;
    7991             :         default:
    7992         683 :                 return 11;
    7993             :         }
    7994        1391 : }
    7995             : 
    7996             : static GF_Err IndexedFaceSet2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7997             : {
    7998        3710 :         switch(IndexMode) {
    7999             :         case GF_SG_FIELD_CODING_IN:
    8000           0 :                 *allField = IndexedFaceSet2D_In2All[inField];
    8001           0 :                 return GF_OK;
    8002             :         case GF_SG_FIELD_CODING_DEF:
    8003        1855 :                 *allField = IndexedFaceSet2D_Def2All[inField];
    8004        1855 :                 return GF_OK;
    8005             :         case GF_SG_FIELD_CODING_OUT:
    8006           0 :                 *allField = IndexedFaceSet2D_Out2All[inField];
    8007           0 :                 return GF_OK;
    8008             :         default:
    8009           0 :                 return GF_BAD_PARAM;
    8010             :         }
    8011        1855 : }
    8012             : static GF_Err IndexedFaceSet2D_get_field(GF_Node *node, GF_FieldInfo *info)
    8013             : {
    8014       28960 :         switch (info->fieldIndex) {
    8015             :         case 0:
    8016         669 :                 info->name = "set_colorIndex";
    8017         669 :                 info->eventType = GF_SG_EVENT_IN;
    8018         669 :                 info->on_event_in = ((M_IndexedFaceSet2D *)node)->on_set_colorIndex;
    8019         669 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8020         669 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->set_colorIndex;
    8021         669 :                 return GF_OK;
    8022             :         case 1:
    8023         669 :                 info->name = "set_coordIndex";
    8024         669 :                 info->eventType = GF_SG_EVENT_IN;
    8025         669 :                 info->on_event_in = ((M_IndexedFaceSet2D *)node)->on_set_coordIndex;
    8026         669 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8027         669 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->set_coordIndex;
    8028         669 :                 return GF_OK;
    8029             :         case 2:
    8030         669 :                 info->name = "set_texCoordIndex";
    8031         669 :                 info->eventType = GF_SG_EVENT_IN;
    8032         669 :                 info->on_event_in = ((M_IndexedFaceSet2D *)node)->on_set_texCoordIndex;
    8033         669 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8034         669 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->set_texCoordIndex;
    8035         669 :                 return GF_OK;
    8036             :         case 3:
    8037         867 :                 info->name = "color";
    8038         867 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8039         867 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8040         867 :                 info->NDTtype = NDT_SFColorNode;
    8041         867 :                 info->far_ptr = & ((M_IndexedFaceSet2D *)node)->color;
    8042         867 :                 return GF_OK;
    8043             :         case 4:
    8044        1994 :                 info->name = "coord";
    8045        1994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8046        1994 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8047        1994 :                 info->NDTtype = NDT_SFCoordinate2DNode;
    8048        1994 :                 info->far_ptr = & ((M_IndexedFaceSet2D *)node)->coord;
    8049        1994 :                 return GF_OK;
    8050             :         case 5:
    8051         822 :                 info->name = "texCoord";
    8052         822 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8053         822 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8054         822 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
    8055         822 :                 info->far_ptr = & ((M_IndexedFaceSet2D *)node)->texCoord;
    8056         822 :                 return GF_OK;
    8057             :         case 6:
    8058        1689 :                 info->name = "colorIndex";
    8059        1689 :                 info->eventType = GF_SG_EVENT_FIELD;
    8060        1689 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8061        1689 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->colorIndex;
    8062        1689 :                 return GF_OK;
    8063             :         case 7:
    8064        1914 :                 info->name = "colorPerVertex";
    8065        1914 :                 info->eventType = GF_SG_EVENT_FIELD;
    8066        1914 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    8067        1914 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->colorPerVertex;
    8068        1914 :                 return GF_OK;
    8069             :         case 8:
    8070        1644 :                 info->name = "convex";
    8071        1644 :                 info->eventType = GF_SG_EVENT_FIELD;
    8072        1644 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    8073        1644 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->convex;
    8074        1644 :                 return GF_OK;
    8075             :         case 9:
    8076        1899 :                 info->name = "coordIndex";
    8077        1899 :                 info->eventType = GF_SG_EVENT_FIELD;
    8078        1899 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8079        1899 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->coordIndex;
    8080        1899 :                 return GF_OK;
    8081             :         case 10:
    8082        1644 :                 info->name = "texCoordIndex";
    8083        1644 :                 info->eventType = GF_SG_EVENT_FIELD;
    8084        1644 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8085        1644 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->texCoordIndex;
    8086        1644 :                 return GF_OK;
    8087             :         default:
    8088           0 :                 return GF_BAD_PARAM;
    8089             :         }
    8090       14480 : }
    8091             : 
    8092             : 
    8093             : static s32 IndexedFaceSet2D_get_field_index_by_name(char *name)
    8094             : {
    8095         954 :         if (!strcmp("set_colorIndex", name)) return 0;
    8096         477 :         if (!strcmp("set_coordIndex", name)) return 1;
    8097         477 :         if (!strcmp("set_texCoordIndex", name)) return 2;
    8098         489 :         if (!strcmp("color", name)) return 3;
    8099         778 :         if (!strcmp("coord", name)) return 4;
    8100         152 :         if (!strcmp("texCoord", name)) return 5;
    8101         164 :         if (!strcmp("colorIndex", name)) return 6;
    8102         212 :         if (!strcmp("colorPerVertex", name)) return 7;
    8103          68 :         if (!strcmp("convex", name)) return 8;
    8104         136 :         if (!strcmp("coordIndex", name)) return 9;
    8105           0 :         if (!strcmp("texCoordIndex", name)) return 10;
    8106           0 :         return -1;
    8107         477 : }
    8108             : static Bool IndexedFaceSet2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8109             : {
    8110           0 :         switch (FieldIndex) {
    8111             :         case 6:
    8112           0 :                 *AType = 0;
    8113           0 :                 *QType = 14;
    8114           0 :                 *b_min = FLT2FIX(-1);
    8115           0 :                 *b_max = FIX_MAX;
    8116           0 :                 return 1;
    8117             :         case 9:
    8118           0 :                 *AType = 0;
    8119           0 :                 *QType = 14;
    8120           0 :                 *b_min = FLT2FIX(-1);
    8121           0 :                 *b_max = FIX_MAX;
    8122           0 :                 return 1;
    8123             :         case 10:
    8124           0 :                 *AType = 0;
    8125           0 :                 *QType = 14;
    8126           0 :                 *b_min = FLT2FIX(-1);
    8127           0 :                 *b_max = FIX_MAX;
    8128           0 :                 return 1;
    8129             :         default:
    8130           0 :                 return 0;
    8131             :         }
    8132           0 : }
    8133             : 
    8134             : 
    8135             : 
    8136             : GF_Node *IndexedFaceSet2D_Create()
    8137             : {
    8138             :         M_IndexedFaceSet2D *p;
    8139        4587 :         GF_SAFEALLOC(p, M_IndexedFaceSet2D);
    8140        1529 :         if(!p) return NULL;
    8141        1529 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_IndexedFaceSet2D);
    8142             : 
    8143             :         /*default field values*/
    8144        1529 :         p->colorPerVertex = 1;
    8145        1529 :         p->convex = 1;
    8146        1529 :         return (GF_Node *)p;
    8147        1529 : }
    8148             : 
    8149             : 
    8150             : /*
    8151             :         IndexedLineSet Node deletion
    8152             : */
    8153             : 
    8154             : static void IndexedLineSet_Del(GF_Node *node)
    8155             : {
    8156          72 :         M_IndexedLineSet *p = (M_IndexedLineSet *) node;
    8157          36 :         gf_sg_mfint32_del(p->set_colorIndex);
    8158          36 :         gf_sg_mfint32_del(p->set_coordIndex);
    8159          36 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    8160          36 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
    8161          36 :         gf_sg_mfint32_del(p->colorIndex);
    8162          36 :         gf_sg_mfint32_del(p->coordIndex);
    8163          36 :         gf_node_free((GF_Node *) p);
    8164          36 : }
    8165             : 
    8166             : static const u16 IndexedLineSet_Def2All[] = { 2, 3, 4, 5, 6};
    8167             : static const u16 IndexedLineSet_In2All[] = { 0, 1, 2, 3};
    8168             : static const u16 IndexedLineSet_Out2All[] = { 2, 3};
    8169             : 
    8170             : static u32 IndexedLineSet_get_field_count(GF_Node *node, u8 IndexMode)
    8171             : {
    8172          64 :         switch(IndexMode) {
    8173             :         case GF_SG_FIELD_CODING_IN:
    8174           0 :                 return 4;
    8175             :         case GF_SG_FIELD_CODING_DEF:
    8176          18 :                 return 5;
    8177             :         case GF_SG_FIELD_CODING_OUT:
    8178           0 :                 return 2;
    8179             :         case GF_SG_FIELD_CODING_DYN:
    8180           0 :                 return 0;
    8181             :         default:
    8182          14 :                 return 7;
    8183             :         }
    8184          32 : }
    8185             : 
    8186             : static GF_Err IndexedLineSet_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8187             : {
    8188         130 :         switch(IndexMode) {
    8189             :         case GF_SG_FIELD_CODING_IN:
    8190           0 :                 *allField = IndexedLineSet_In2All[inField];
    8191           0 :                 return GF_OK;
    8192             :         case GF_SG_FIELD_CODING_DEF:
    8193          65 :                 *allField = IndexedLineSet_Def2All[inField];
    8194          65 :                 return GF_OK;
    8195             :         case GF_SG_FIELD_CODING_OUT:
    8196           0 :                 *allField = IndexedLineSet_Out2All[inField];
    8197           0 :                 return GF_OK;
    8198             :         default:
    8199           0 :                 return GF_BAD_PARAM;
    8200             :         }
    8201          65 : }
    8202             : static GF_Err IndexedLineSet_get_field(GF_Node *node, GF_FieldInfo *info)
    8203             : {
    8204         618 :         switch (info->fieldIndex) {
    8205             :         case 0:
    8206          14 :                 info->name = "set_colorIndex";
    8207          14 :                 info->eventType = GF_SG_EVENT_IN;
    8208          14 :                 info->on_event_in = ((M_IndexedLineSet *)node)->on_set_colorIndex;
    8209          14 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8210          14 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->set_colorIndex;
    8211          14 :                 return GF_OK;
    8212             :         case 1:
    8213          14 :                 info->name = "set_coordIndex";
    8214          14 :                 info->eventType = GF_SG_EVENT_IN;
    8215          14 :                 info->on_event_in = ((M_IndexedLineSet *)node)->on_set_coordIndex;
    8216          14 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8217          14 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->set_coordIndex;
    8218          14 :                 return GF_OK;
    8219             :         case 2:
    8220          48 :                 info->name = "color";
    8221          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8222          48 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8223          48 :                 info->NDTtype = NDT_SFColorNode;
    8224          48 :                 info->far_ptr = & ((M_IndexedLineSet *)node)->color;
    8225          48 :                 return GF_OK;
    8226             :         case 3:
    8227          48 :                 info->name = "coord";
    8228          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8229          48 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8230          48 :                 info->NDTtype = NDT_SFCoordinateNode;
    8231          48 :                 info->far_ptr = & ((M_IndexedLineSet *)node)->coord;
    8232          48 :                 return GF_OK;
    8233             :         case 4:
    8234          66 :                 info->name = "colorIndex";
    8235          66 :                 info->eventType = GF_SG_EVENT_FIELD;
    8236          66 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8237          66 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->colorIndex;
    8238          66 :                 return GF_OK;
    8239             :         case 5:
    8240          53 :                 info->name = "colorPerVertex";
    8241          53 :                 info->eventType = GF_SG_EVENT_FIELD;
    8242          53 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    8243          53 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->colorPerVertex;
    8244          53 :                 return GF_OK;
    8245             :         case 6:
    8246          66 :                 info->name = "coordIndex";
    8247          66 :                 info->eventType = GF_SG_EVENT_FIELD;
    8248          66 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8249          66 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->coordIndex;
    8250          66 :                 return GF_OK;
    8251             :         default:
    8252           0 :                 return GF_BAD_PARAM;
    8253             :         }
    8254         309 : }
    8255             : 
    8256             : 
    8257             : static s32 IndexedLineSet_get_field_index_by_name(char *name)
    8258             : {
    8259          76 :         if (!strcmp("set_colorIndex", name)) return 0;
    8260          38 :         if (!strcmp("set_coordIndex", name)) return 1;
    8261          46 :         if (!strcmp("color", name)) return 2;
    8262          38 :         if (!strcmp("coord", name)) return 3;
    8263          30 :         if (!strcmp("colorIndex", name)) return 4;
    8264          20 :         if (!strcmp("colorPerVertex", name)) return 5;
    8265          16 :         if (!strcmp("coordIndex", name)) return 6;
    8266           0 :         return -1;
    8267          38 : }
    8268             : static Bool IndexedLineSet_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8269             : {
    8270           0 :         switch (FieldIndex) {
    8271             :         case 4:
    8272           0 :                 *AType = 0;
    8273           0 :                 *QType = 14;
    8274           0 :                 *b_min = FLT2FIX(-1);
    8275           0 :                 *b_max = FIX_MAX;
    8276           0 :                 return 1;
    8277             :         case 6:
    8278           0 :                 *AType = 0;
    8279           0 :                 *QType = 14;
    8280           0 :                 *b_min = FLT2FIX(-1);
    8281           0 :                 *b_max = FIX_MAX;
    8282           0 :                 return 1;
    8283             :         default:
    8284           0 :                 return 0;
    8285             :         }
    8286           0 : }
    8287             : 
    8288             : 
    8289             : 
    8290             : GF_Node *IndexedLineSet_Create()
    8291             : {
    8292             :         M_IndexedLineSet *p;
    8293         108 :         GF_SAFEALLOC(p, M_IndexedLineSet);
    8294          36 :         if(!p) return NULL;
    8295          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_IndexedLineSet);
    8296             : 
    8297             :         /*default field values*/
    8298          36 :         p->colorPerVertex = 1;
    8299          36 :         return (GF_Node *)p;
    8300          36 : }
    8301             : 
    8302             : 
    8303             : /*
    8304             :         IndexedLineSet2D Node deletion
    8305             : */
    8306             : 
    8307             : static void IndexedLineSet2D_Del(GF_Node *node)
    8308             : {
    8309        1670 :         M_IndexedLineSet2D *p = (M_IndexedLineSet2D *) node;
    8310         835 :         gf_sg_mfint32_del(p->set_colorIndex);
    8311         835 :         gf_sg_mfint32_del(p->set_coordIndex);
    8312         835 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    8313         835 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
    8314         835 :         gf_sg_mfint32_del(p->colorIndex);
    8315         835 :         gf_sg_mfint32_del(p->coordIndex);
    8316         835 :         gf_node_free((GF_Node *) p);
    8317         835 : }
    8318             : 
    8319             : static const u16 IndexedLineSet2D_Def2All[] = { 2, 3, 4, 5, 6};
    8320             : static const u16 IndexedLineSet2D_In2All[] = { 0, 1, 2, 3};
    8321             : static const u16 IndexedLineSet2D_Out2All[] = { 2, 3};
    8322             : 
    8323             : static u32 IndexedLineSet2D_get_field_count(GF_Node *node, u8 IndexMode)
    8324             : {
    8325        1518 :         switch(IndexMode) {
    8326             :         case GF_SG_FIELD_CODING_IN:
    8327           0 :                 return 4;
    8328             :         case GF_SG_FIELD_CODING_DEF:
    8329         254 :                 return 5;
    8330             :         case GF_SG_FIELD_CODING_OUT:
    8331           0 :                 return 2;
    8332             :         case GF_SG_FIELD_CODING_DYN:
    8333           0 :                 return 0;
    8334             :         default:
    8335         505 :                 return 7;
    8336             :         }
    8337         759 : }
    8338             : 
    8339             : static GF_Err IndexedLineSet2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8340             : {
    8341        1040 :         switch(IndexMode) {
    8342             :         case GF_SG_FIELD_CODING_IN:
    8343           0 :                 *allField = IndexedLineSet2D_In2All[inField];
    8344           0 :                 return GF_OK;
    8345             :         case GF_SG_FIELD_CODING_DEF:
    8346         520 :                 *allField = IndexedLineSet2D_Def2All[inField];
    8347         520 :                 return GF_OK;
    8348             :         case GF_SG_FIELD_CODING_OUT:
    8349           0 :                 *allField = IndexedLineSet2D_Out2All[inField];
    8350           0 :                 return GF_OK;
    8351             :         default:
    8352           0 :                 return GF_BAD_PARAM;
    8353             :         }
    8354         520 : }
    8355             : static GF_Err IndexedLineSet2D_get_field(GF_Node *node, GF_FieldInfo *info)
    8356             : {
    8357       12426 :         switch (info->fieldIndex) {
    8358             :         case 0:
    8359         505 :                 info->name = "set_colorIndex";
    8360         505 :                 info->eventType = GF_SG_EVENT_IN;
    8361         505 :                 info->on_event_in = ((M_IndexedLineSet2D *)node)->on_set_colorIndex;
    8362         505 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8363         505 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->set_colorIndex;
    8364         505 :                 return GF_OK;
    8365             :         case 1:
    8366         505 :                 info->name = "set_coordIndex";
    8367         505 :                 info->eventType = GF_SG_EVENT_IN;
    8368         505 :                 info->on_event_in = ((M_IndexedLineSet2D *)node)->on_set_coordIndex;
    8369         505 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8370         505 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->set_coordIndex;
    8371         505 :                 return GF_OK;
    8372             :         case 2:
    8373         592 :                 info->name = "color";
    8374         592 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8375         592 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8376         592 :                 info->NDTtype = NDT_SFColorNode;
    8377         592 :                 info->far_ptr = & ((M_IndexedLineSet2D *)node)->color;
    8378         592 :                 return GF_OK;
    8379             :         case 3:
    8380         984 :                 info->name = "coord";
    8381         984 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8382         984 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8383         984 :                 info->NDTtype = NDT_SFCoordinate2DNode;
    8384         984 :                 info->far_ptr = & ((M_IndexedLineSet2D *)node)->coord;
    8385         984 :                 return GF_OK;
    8386             :         case 4:
    8387        1154 :                 info->name = "colorIndex";
    8388        1154 :                 info->eventType = GF_SG_EVENT_FIELD;
    8389        1154 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8390        1154 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->colorIndex;
    8391        1154 :                 return GF_OK;
    8392             :         case 5:
    8393        1154 :                 info->name = "colorPerVertex";
    8394        1154 :                 info->eventType = GF_SG_EVENT_FIELD;
    8395        1154 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    8396        1154 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->colorPerVertex;
    8397        1154 :                 return GF_OK;
    8398             :         case 6:
    8399        1319 :                 info->name = "coordIndex";
    8400        1319 :                 info->eventType = GF_SG_EVENT_FIELD;
    8401        1319 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8402        1319 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->coordIndex;
    8403        1319 :                 return GF_OK;
    8404             :         default:
    8405           0 :                 return GF_BAD_PARAM;
    8406             :         }
    8407        6213 : }
    8408             : 
    8409             : 
    8410             : static s32 IndexedLineSet2D_get_field_index_by_name(char *name)
    8411             : {
    8412         378 :         if (!strcmp("set_colorIndex", name)) return 0;
    8413         189 :         if (!strcmp("set_coordIndex", name)) return 1;
    8414         197 :         if (!strcmp("color", name)) return 2;
    8415         294 :         if (!strcmp("coord", name)) return 3;
    8416          76 :         if (!strcmp("colorIndex", name)) return 4;
    8417          68 :         if (!strcmp("colorPerVertex", name)) return 5;
    8418         104 :         if (!strcmp("coordIndex", name)) return 6;
    8419           0 :         return -1;
    8420         189 : }
    8421             : static Bool IndexedLineSet2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8422             : {
    8423           0 :         switch (FieldIndex) {
    8424             :         case 4:
    8425           0 :                 *AType = 0;
    8426           0 :                 *QType = 14;
    8427           0 :                 *b_min = FLT2FIX(-1);
    8428           0 :                 *b_max = FIX_MAX;
    8429           0 :                 return 1;
    8430             :         case 6:
    8431           0 :                 *AType = 0;
    8432           0 :                 *QType = 14;
    8433           0 :                 *b_min = FLT2FIX(-1);
    8434           0 :                 *b_max = FIX_MAX;
    8435           0 :                 return 1;
    8436             :         default:
    8437           0 :                 return 0;
    8438             :         }
    8439           0 : }
    8440             : 
    8441             : 
    8442             : 
    8443             : GF_Node *IndexedLineSet2D_Create()
    8444             : {
    8445             :         M_IndexedLineSet2D *p;
    8446        2505 :         GF_SAFEALLOC(p, M_IndexedLineSet2D);
    8447         835 :         if(!p) return NULL;
    8448         835 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_IndexedLineSet2D);
    8449             : 
    8450             :         /*default field values*/
    8451         835 :         p->colorPerVertex = 1;
    8452         835 :         return (GF_Node *)p;
    8453         835 : }
    8454             : 
    8455             : 
    8456             : /*
    8457             :         Inline Node deletion
    8458             : */
    8459             : 
    8460             : static void Inline_Del(GF_Node *node)
    8461             : {
    8462         512 :         M_Inline *p = (M_Inline *) node;
    8463         256 :         gf_sg_mfurl_del(p->url);
    8464         256 :         gf_node_free((GF_Node *) p);
    8465         256 : }
    8466             : 
    8467             : static const u16 Inline_Def2All[] = { 0};
    8468             : static const u16 Inline_In2All[] = { 0};
    8469             : static const u16 Inline_Out2All[] = { 0};
    8470             : 
    8471             : static u32 Inline_get_field_count(GF_Node *node, u8 IndexMode)
    8472             : {
    8473         398 :         switch(IndexMode) {
    8474             :         case GF_SG_FIELD_CODING_IN:
    8475           0 :                 return 1;
    8476             :         case GF_SG_FIELD_CODING_DEF:
    8477         108 :                 return 1;
    8478             :         case GF_SG_FIELD_CODING_OUT:
    8479           0 :                 return 1;
    8480             :         case GF_SG_FIELD_CODING_DYN:
    8481           0 :                 return 0;
    8482             :         default:
    8483          91 :                 return 1;
    8484             :         }
    8485         199 : }
    8486             : 
    8487             : static GF_Err Inline_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8488             : {
    8489         168 :         switch(IndexMode) {
    8490             :         case GF_SG_FIELD_CODING_IN:
    8491           0 :                 *allField = Inline_In2All[inField];
    8492           0 :                 return GF_OK;
    8493             :         case GF_SG_FIELD_CODING_DEF:
    8494          84 :                 *allField = Inline_Def2All[inField];
    8495          84 :                 return GF_OK;
    8496             :         case GF_SG_FIELD_CODING_OUT:
    8497           0 :                 *allField = Inline_Out2All[inField];
    8498           0 :                 return GF_OK;
    8499             :         default:
    8500           0 :                 return GF_BAD_PARAM;
    8501             :         }
    8502          84 : }
    8503             : static GF_Err Inline_get_field(GF_Node *node, GF_FieldInfo *info)
    8504             : {
    8505         936 :         switch (info->fieldIndex) {
    8506             :         case 0:
    8507         468 :                 info->name = "url";
    8508         468 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8509         468 :                 info->fieldType = GF_SG_VRML_MFURL;
    8510         468 :                 info->far_ptr = & ((M_Inline *) node)->url;
    8511         468 :                 return GF_OK;
    8512             :         default:
    8513           0 :                 return GF_BAD_PARAM;
    8514             :         }
    8515         468 : }
    8516             : 
    8517             : 
    8518             : static s32 Inline_get_field_index_by_name(char *name)
    8519             : {
    8520         329 :         if (!strcmp("url", name)) return 0;
    8521          49 :         return -1;
    8522         126 : }
    8523             : static Bool Inline_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8524             : {
    8525             :         switch (FieldIndex) {
    8526             :         default:
    8527           0 :                 return 0;
    8528             :         }
    8529             : }
    8530             : 
    8531             : 
    8532             : 
    8533             : GF_Node *Inline_Create()
    8534             : {
    8535             :         M_Inline *p;
    8536         768 :         GF_SAFEALLOC(p, M_Inline);
    8537         256 :         if(!p) return NULL;
    8538         256 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Inline);
    8539             : 
    8540             :         /*default field values*/
    8541         256 :         return (GF_Node *)p;
    8542         256 : }
    8543             : 
    8544             : 
    8545             : /*
    8546             :         LOD Node deletion
    8547             : */
    8548             : 
    8549             : static void LOD_Del(GF_Node *node)
    8550             : {
    8551          36 :         M_LOD *p = (M_LOD *) node;
    8552          18 :         gf_node_unregister_children((GF_Node *) p, p->level);
    8553          18 :         gf_sg_mffloat_del(p->range);
    8554          18 :         gf_node_free((GF_Node *) p);
    8555          18 : }
    8556             : 
    8557             : static const u16 LOD_Def2All[] = { 0, 1, 2};
    8558             : static const u16 LOD_In2All[] = { 0};
    8559             : static const u16 LOD_Out2All[] = { 0};
    8560             : 
    8561             : static u32 LOD_get_field_count(GF_Node *node, u8 IndexMode)
    8562             : {
    8563          32 :         switch(IndexMode) {
    8564             :         case GF_SG_FIELD_CODING_IN:
    8565           0 :                 return 1;
    8566             :         case GF_SG_FIELD_CODING_DEF:
    8567           9 :                 return 3;
    8568             :         case GF_SG_FIELD_CODING_OUT:
    8569           0 :                 return 1;
    8570             :         case GF_SG_FIELD_CODING_DYN:
    8571           0 :                 return 0;
    8572             :         default:
    8573           7 :                 return 3;
    8574             :         }
    8575          16 : }
    8576             : 
    8577             : static GF_Err LOD_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8578             : {
    8579          32 :         switch(IndexMode) {
    8580             :         case GF_SG_FIELD_CODING_IN:
    8581           0 :                 *allField = LOD_In2All[inField];
    8582           0 :                 return GF_OK;
    8583             :         case GF_SG_FIELD_CODING_DEF:
    8584          16 :                 *allField = LOD_Def2All[inField];
    8585          16 :                 return GF_OK;
    8586             :         case GF_SG_FIELD_CODING_OUT:
    8587           0 :                 *allField = LOD_Out2All[inField];
    8588           0 :                 return GF_OK;
    8589             :         default:
    8590           0 :                 return GF_BAD_PARAM;
    8591             :         }
    8592          16 : }
    8593             : static GF_Err LOD_get_field(GF_Node *node, GF_FieldInfo *info)
    8594             : {
    8595         154 :         switch (info->fieldIndex) {
    8596             :         case 0:
    8597          24 :                 info->name = "level";
    8598          24 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8599          24 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8600          24 :                 info->NDTtype = NDT_SF3DNode;
    8601          24 :                 info->far_ptr = & ((M_LOD *)node)->level;
    8602          24 :                 return GF_OK;
    8603             :         case 1:
    8604          20 :                 info->name = "center";
    8605          20 :                 info->eventType = GF_SG_EVENT_FIELD;
    8606          20 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    8607          20 :                 info->far_ptr = & ((M_LOD *) node)->center;
    8608          20 :                 return GF_OK;
    8609             :         case 2:
    8610          33 :                 info->name = "range";
    8611          33 :                 info->eventType = GF_SG_EVENT_FIELD;
    8612          33 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    8613          33 :                 info->far_ptr = & ((M_LOD *) node)->range;
    8614          33 :                 return GF_OK;
    8615             :         default:
    8616           0 :                 return GF_BAD_PARAM;
    8617             :         }
    8618          77 : }
    8619             : 
    8620             : 
    8621             : static s32 LOD_get_field_index_by_name(char *name)
    8622             : {
    8623          24 :         if (!strcmp("level", name)) return 0;
    8624           8 :         if (!strcmp("center", name)) return 1;
    8625           8 :         if (!strcmp("range", name)) return 2;
    8626           0 :         return -1;
    8627          10 : }
    8628             : static Bool LOD_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8629             : {
    8630           0 :         switch (FieldIndex) {
    8631             :         case 1:
    8632           0 :                 *AType = 0;
    8633           0 :                 *QType = 1;
    8634           0 :                 *b_min = FIX_MIN;
    8635           0 :                 *b_max = FIX_MAX;
    8636           0 :                 return 1;
    8637             :         case 2:
    8638           0 :                 *AType = 0;
    8639           0 :                 *QType = 11;
    8640           0 :                 *b_min = FLT2FIX(0);
    8641           0 :                 *b_max = FIX_MAX;
    8642           0 :                 return 1;
    8643             :         default:
    8644           0 :                 return 0;
    8645             :         }
    8646           0 : }
    8647             : 
    8648             : 
    8649             : 
    8650             : GF_Node *LOD_Create()
    8651             : {
    8652             :         M_LOD *p;
    8653          54 :         GF_SAFEALLOC(p, M_LOD);
    8654          18 :         if(!p) return NULL;
    8655          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_LOD);
    8656             : 
    8657             :         /*default field values*/
    8658          18 :         p->center.x = FLT2FIX(0);
    8659          18 :         p->center.y = FLT2FIX(0);
    8660          18 :         p->center.z = FLT2FIX(0);
    8661          18 :         return (GF_Node *)p;
    8662          18 : }
    8663             : 
    8664             : 
    8665             : /*
    8666             :         Layer2D Node deletion
    8667             : */
    8668             : 
    8669             : static void Layer2D_Del(GF_Node *node)
    8670             : {
    8671         734 :         M_Layer2D *p = (M_Layer2D *) node;
    8672         367 :         gf_node_unregister((GF_Node *) p->background, (GF_Node *) p);
    8673         367 :         gf_node_unregister((GF_Node *) p->viewport, (GF_Node *) p);
    8674         367 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    8675         367 :         gf_node_free((GF_Node *) p);
    8676         367 : }
    8677             : 
    8678             : static const u16 Layer2D_Def2All[] = { 2, 3, 4, 5};
    8679             : static const u16 Layer2D_In2All[] = { 0, 1, 2, 3, 4, 5};
    8680             : static const u16 Layer2D_Out2All[] = { 2, 3, 4, 5};
    8681             : static const u16 Layer2D_Dyn2All[] = { 3};
    8682             : 
    8683             : static u32 Layer2D_get_field_count(GF_Node *node, u8 IndexMode)
    8684             : {
    8685         664 :         switch(IndexMode) {
    8686             :         case GF_SG_FIELD_CODING_IN:
    8687          27 :                 return 6;
    8688             :         case GF_SG_FIELD_CODING_DEF:
    8689         171 :                 return 4;
    8690             :         case GF_SG_FIELD_CODING_OUT:
    8691           0 :                 return 4;
    8692             :         case GF_SG_FIELD_CODING_DYN:
    8693           0 :                 return 1;
    8694             :         default:
    8695         134 :                 return 6;
    8696             :         }
    8697         332 : }
    8698             : 
    8699             : static GF_Err Layer2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8700             : {
    8701         922 :         switch(IndexMode) {
    8702             :         case GF_SG_FIELD_CODING_IN:
    8703          39 :                 *allField = Layer2D_In2All[inField];
    8704          39 :                 return GF_OK;
    8705             :         case GF_SG_FIELD_CODING_DEF:
    8706         422 :                 *allField = Layer2D_Def2All[inField];
    8707         422 :                 return GF_OK;
    8708             :         case GF_SG_FIELD_CODING_OUT:
    8709           0 :                 *allField = Layer2D_Out2All[inField];
    8710           0 :                 return GF_OK;
    8711             :         case GF_SG_FIELD_CODING_DYN:
    8712           0 :                 *allField = Layer2D_Dyn2All[inField];
    8713           0 :                 return GF_OK;
    8714             :         default:
    8715           0 :                 return GF_BAD_PARAM;
    8716             :         }
    8717         461 : }
    8718             : static GF_Err Layer2D_get_field(GF_Node *node, GF_FieldInfo *info)
    8719             : {
    8720        4652 :         switch (info->fieldIndex) {
    8721             :         case 0:
    8722         134 :                 info->name = "addChildren";
    8723         134 :                 info->eventType = GF_SG_EVENT_IN;
    8724         134 :                 info->on_event_in = ((M_Layer2D *)node)->on_addChildren;
    8725         134 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8726         134 :                 info->NDTtype = NDT_SF2DNode;
    8727         134 :                 info->far_ptr = & ((M_Layer2D *)node)->addChildren;
    8728         134 :                 return GF_OK;
    8729             :         case 1:
    8730         134 :                 info->name = "removeChildren";
    8731         134 :                 info->eventType = GF_SG_EVENT_IN;
    8732         134 :                 info->on_event_in = ((M_Layer2D *)node)->on_removeChildren;
    8733         134 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8734         134 :                 info->NDTtype = NDT_SF2DNode;
    8735         134 :                 info->far_ptr = & ((M_Layer2D *)node)->removeChildren;
    8736         134 :                 return GF_OK;
    8737             :         case 2:
    8738         537 :                 info->name = "children";
    8739         537 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8740         537 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8741         537 :                 info->NDTtype = NDT_SF2DNode;
    8742         537 :                 info->far_ptr = & ((M_Layer2D *)node)->children;
    8743         537 :                 return GF_OK;
    8744             :         case 3:
    8745         922 :                 info->name = "size";
    8746         922 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8747         922 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    8748         922 :                 info->far_ptr = & ((M_Layer2D *) node)->size;
    8749         922 :                 return GF_OK;
    8750             :         case 4:
    8751         217 :                 info->name = "background";
    8752         217 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8753         217 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8754         217 :                 info->NDTtype = NDT_SFBackground2DNode;
    8755         217 :                 info->far_ptr = & ((M_Layer2D *)node)->background;
    8756         217 :                 return GF_OK;
    8757             :         case 5:
    8758         382 :                 info->name = "viewport";
    8759         382 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8760         382 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8761         382 :                 info->NDTtype = NDT_SFViewportNode;
    8762         382 :                 info->far_ptr = & ((M_Layer2D *)node)->viewport;
    8763         382 :                 return GF_OK;
    8764             :         default:
    8765           0 :                 return GF_BAD_PARAM;
    8766             :         }
    8767        2326 : }
    8768             : 
    8769             : 
    8770             : static s32 Layer2D_get_field_index_by_name(char *name)
    8771             : {
    8772        1088 :         if (!strcmp("addChildren", name)) return 0;
    8773         544 :         if (!strcmp("removeChildren", name)) return 1;
    8774         676 :         if (!strcmp("children", name)) return 2;
    8775         756 :         if (!strcmp("size", name)) return 3;
    8776          80 :         if (!strcmp("background", name)) return 4;
    8777         112 :         if (!strcmp("viewport", name)) return 5;
    8778           0 :         return -1;
    8779         544 : }
    8780             : static Bool Layer2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8781             : {
    8782           0 :         switch (FieldIndex) {
    8783             :         case 3:
    8784           0 :                 *AType = 12;
    8785           0 :                 *QType = 12;
    8786           0 :                 *b_min = FIX_MIN;
    8787           0 :                 *b_max = FIX_MAX;
    8788           0 :                 return 1;
    8789             :         default:
    8790           0 :                 return 0;
    8791             :         }
    8792           0 : }
    8793             : 
    8794             : 
    8795             : 
    8796             : GF_Node *Layer2D_Create()
    8797             : {
    8798             :         M_Layer2D *p;
    8799        1101 :         GF_SAFEALLOC(p, M_Layer2D);
    8800         367 :         if(!p) return NULL;
    8801         367 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Layer2D);
    8802         367 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    8803             : 
    8804             :         /*default field values*/
    8805         367 :         p->size.x = FLT2FIX(-1);
    8806         367 :         p->size.y = FLT2FIX(-1);
    8807         367 :         return (GF_Node *)p;
    8808         367 : }
    8809             : 
    8810             : 
    8811             : /*
    8812             :         Layer3D Node deletion
    8813             : */
    8814             : 
    8815             : static void Layer3D_Del(GF_Node *node)
    8816             : {
    8817         184 :         M_Layer3D *p = (M_Layer3D *) node;
    8818          92 :         gf_node_unregister((GF_Node *) p->background, (GF_Node *) p);
    8819          92 :         gf_node_unregister((GF_Node *) p->fog, (GF_Node *) p);
    8820          92 :         gf_node_unregister((GF_Node *) p->navigationInfo, (GF_Node *) p);
    8821          92 :         gf_node_unregister((GF_Node *) p->viewpoint, (GF_Node *) p);
    8822          92 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    8823          92 :         gf_node_free((GF_Node *) p);
    8824          92 : }
    8825             : 
    8826             : static const u16 Layer3D_Def2All[] = { 2, 3, 4, 5, 6, 7};
    8827             : static const u16 Layer3D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
    8828             : static const u16 Layer3D_Out2All[] = { 2, 3, 4, 5, 6, 7};
    8829             : static const u16 Layer3D_Dyn2All[] = { 3};
    8830             : 
    8831             : static u32 Layer3D_get_field_count(GF_Node *node, u8 IndexMode)
    8832             : {
    8833         164 :         switch(IndexMode) {
    8834             :         case GF_SG_FIELD_CODING_IN:
    8835           0 :                 return 8;
    8836             :         case GF_SG_FIELD_CODING_DEF:
    8837          45 :                 return 6;
    8838             :         case GF_SG_FIELD_CODING_OUT:
    8839           0 :                 return 6;
    8840             :         case GF_SG_FIELD_CODING_DYN:
    8841           0 :                 return 1;
    8842             :         default:
    8843          37 :                 return 8;
    8844             :         }
    8845          82 : }
    8846             : 
    8847             : static GF_Err Layer3D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8848             : {
    8849         310 :         switch(IndexMode) {
    8850             :         case GF_SG_FIELD_CODING_IN:
    8851           0 :                 *allField = Layer3D_In2All[inField];
    8852           0 :                 return GF_OK;
    8853             :         case GF_SG_FIELD_CODING_DEF:
    8854         155 :                 *allField = Layer3D_Def2All[inField];
    8855         155 :                 return GF_OK;
    8856             :         case GF_SG_FIELD_CODING_OUT:
    8857           0 :                 *allField = Layer3D_Out2All[inField];
    8858           0 :                 return GF_OK;
    8859             :         case GF_SG_FIELD_CODING_DYN:
    8860           0 :                 *allField = Layer3D_Dyn2All[inField];
    8861           0 :                 return GF_OK;
    8862             :         default:
    8863           0 :                 return GF_BAD_PARAM;
    8864             :         }
    8865         155 : }
    8866             : static GF_Err Layer3D_get_field(GF_Node *node, GF_FieldInfo *info)
    8867             : {
    8868        1376 :         switch (info->fieldIndex) {
    8869             :         case 0:
    8870          37 :                 info->name = "addChildren";
    8871          37 :                 info->eventType = GF_SG_EVENT_IN;
    8872          37 :                 info->on_event_in = ((M_Layer3D *)node)->on_addChildren;
    8873          37 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8874          37 :                 info->NDTtype = NDT_SF3DNode;
    8875          37 :                 info->far_ptr = & ((M_Layer3D *)node)->addChildren;
    8876          37 :                 return GF_OK;
    8877             :         case 1:
    8878          37 :                 info->name = "removeChildren";
    8879          37 :                 info->eventType = GF_SG_EVENT_IN;
    8880          37 :                 info->on_event_in = ((M_Layer3D *)node)->on_removeChildren;
    8881          37 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8882          37 :                 info->NDTtype = NDT_SF3DNode;
    8883          37 :                 info->far_ptr = & ((M_Layer3D *)node)->removeChildren;
    8884          37 :                 return GF_OK;
    8885             :         case 2:
    8886         122 :                 info->name = "children";
    8887         122 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8888         122 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8889         122 :                 info->NDTtype = NDT_SF3DNode;
    8890         122 :                 info->far_ptr = & ((M_Layer3D *)node)->children;
    8891         122 :                 return GF_OK;
    8892             :         case 3:
    8893         169 :                 info->name = "size";
    8894         169 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8895         169 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    8896         169 :                 info->far_ptr = & ((M_Layer3D *) node)->size;
    8897         169 :                 return GF_OK;
    8898             :         case 4:
    8899          47 :                 info->name = "background";
    8900          47 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8901          47 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8902          47 :                 info->NDTtype = NDT_SFBackground3DNode;
    8903          47 :                 info->far_ptr = & ((M_Layer3D *)node)->background;
    8904          47 :                 return GF_OK;
    8905             :         case 5:
    8906          47 :                 info->name = "fog";
    8907          47 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8908          47 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8909          47 :                 info->NDTtype = NDT_SFFogNode;
    8910          47 :                 info->far_ptr = & ((M_Layer3D *)node)->fog;
    8911          47 :                 return GF_OK;
    8912             :         case 6:
    8913         122 :                 info->name = "navigationInfo";
    8914         122 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8915         122 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8916         122 :                 info->NDTtype = NDT_SFNavigationInfoNode;
    8917         122 :                 info->far_ptr = & ((M_Layer3D *)node)->navigationInfo;
    8918         122 :                 return GF_OK;
    8919             :         case 7:
    8920         107 :                 info->name = "viewpoint";
    8921         107 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8922         107 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8923         107 :                 info->NDTtype = NDT_SFViewpointNode;
    8924         107 :                 info->far_ptr = & ((M_Layer3D *)node)->viewpoint;
    8925         107 :                 return GF_OK;
    8926             :         default:
    8927           0 :                 return GF_BAD_PARAM;
    8928             :         }
    8929         688 : }
    8930             : 
    8931             : 
    8932             : static s32 Layer3D_get_field_index_by_name(char *name)
    8933             : {
    8934         152 :         if (!strcmp("addChildren", name)) return 0;
    8935          76 :         if (!strcmp("removeChildren", name)) return 1;
    8936          96 :         if (!strcmp("children", name)) return 2;
    8937          76 :         if (!strcmp("size", name)) return 3;
    8938          36 :         if (!strcmp("background", name)) return 4;
    8939          36 :         if (!strcmp("fog", name)) return 5;
    8940          56 :         if (!strcmp("navigationInfo", name)) return 6;
    8941          32 :         if (!strcmp("viewpoint", name)) return 7;
    8942           0 :         return -1;
    8943          76 : }
    8944             : static Bool Layer3D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8945             : {
    8946           0 :         switch (FieldIndex) {
    8947             :         case 3:
    8948           0 :                 *AType = 12;
    8949           0 :                 *QType = 12;
    8950           0 :                 *b_min = FIX_MIN;
    8951           0 :                 *b_max = FIX_MAX;
    8952           0 :                 return 1;
    8953             :         default:
    8954           0 :                 return 0;
    8955             :         }
    8956           0 : }
    8957             : 
    8958             : 
    8959             : 
    8960             : GF_Node *Layer3D_Create()
    8961             : {
    8962             :         M_Layer3D *p;
    8963         276 :         GF_SAFEALLOC(p, M_Layer3D);
    8964          92 :         if(!p) return NULL;
    8965          92 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Layer3D);
    8966          92 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    8967             : 
    8968             :         /*default field values*/
    8969          92 :         p->size.x = FLT2FIX(-1);
    8970          92 :         p->size.y = FLT2FIX(-1);
    8971          92 :         return (GF_Node *)p;
    8972          92 : }
    8973             : 
    8974             : 
    8975             : /*
    8976             :         Layout Node deletion
    8977             : */
    8978             : 
    8979             : static void Layout_Del(GF_Node *node)
    8980             : {
    8981        5040 :         M_Layout *p = (M_Layout *) node;
    8982        2520 :         gf_sg_mfstring_del(p->justify);
    8983        2520 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    8984        2520 :         gf_node_free((GF_Node *) p);
    8985        2520 : }
    8986             : 
    8987             : static const u16 Layout_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
    8988             : static const u16 Layout_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
    8989             : static const u16 Layout_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
    8990             : static const u16 Layout_Dyn2All[] = { 4, 9, 13};
    8991             : 
    8992             : static u32 Layout_get_field_count(GF_Node *node, u8 IndexMode)
    8993             : {
    8994        4984 :         switch(IndexMode) {
    8995             :         case GF_SG_FIELD_CODING_IN:
    8996         252 :                 return 15;
    8997             :         case GF_SG_FIELD_CODING_DEF:
    8998        1260 :                 return 13;
    8999             :         case GF_SG_FIELD_CODING_OUT:
    9000           0 :                 return 13;
    9001             :         case GF_SG_FIELD_CODING_DYN:
    9002           0 :                 return 3;
    9003             :         default:
    9004         980 :                 return 15;
    9005             :         }
    9006        2492 : }
    9007             : 
    9008             : static GF_Err Layout_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9009             : {
    9010       16838 :         switch(IndexMode) {
    9011             :         case GF_SG_FIELD_CODING_IN:
    9012         844 :                 *allField = Layout_In2All[inField];
    9013         844 :                 return GF_OK;
    9014             :         case GF_SG_FIELD_CODING_DEF:
    9015        7575 :                 *allField = Layout_Def2All[inField];
    9016        7575 :                 return GF_OK;
    9017             :         case GF_SG_FIELD_CODING_OUT:
    9018           0 :                 *allField = Layout_Out2All[inField];
    9019           0 :                 return GF_OK;
    9020             :         case GF_SG_FIELD_CODING_DYN:
    9021           0 :                 *allField = Layout_Dyn2All[inField];
    9022           0 :                 return GF_OK;
    9023             :         default:
    9024           0 :                 return GF_BAD_PARAM;
    9025             :         }
    9026        8419 : }
    9027             : static GF_Err Layout_get_field(GF_Node *node, GF_FieldInfo *info)
    9028             : {
    9029       91374 :         switch (info->fieldIndex) {
    9030             :         case 0:
    9031         980 :                 info->name = "addChildren";
    9032         980 :                 info->eventType = GF_SG_EVENT_IN;
    9033         980 :                 info->on_event_in = ((M_Layout *)node)->on_addChildren;
    9034         980 :                 info->fieldType = GF_SG_VRML_MFNODE;
    9035         980 :                 info->NDTtype = NDT_SF2DNode;
    9036         980 :                 info->far_ptr = & ((M_Layout *)node)->addChildren;
    9037         980 :                 return GF_OK;
    9038             :         case 1:
    9039         980 :                 info->name = "removeChildren";
    9040         980 :                 info->eventType = GF_SG_EVENT_IN;
    9041         980 :                 info->on_event_in = ((M_Layout *)node)->on_removeChildren;
    9042         980 :                 info->fieldType = GF_SG_VRML_MFNODE;
    9043         980 :                 info->NDTtype = NDT_SF2DNode;
    9044         980 :                 info->far_ptr = & ((M_Layout *)node)->removeChildren;
    9045         980 :                 return GF_OK;
    9046             :         case 2:
    9047        3360 :                 info->name = "children";
    9048        3360 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9049        3360 :                 info->fieldType = GF_SG_VRML_MFNODE;
    9050        3360 :                 info->NDTtype = NDT_SF2DNode;
    9051        3360 :                 info->far_ptr = & ((M_Layout *)node)->children;
    9052        3360 :                 return GF_OK;
    9053             :         case 3:
    9054        3975 :                 info->name = "wrap";
    9055        3975 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9056        3975 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9057        3975 :                 info->far_ptr = & ((M_Layout *) node)->wrap;
    9058        3975 :                 return GF_OK;
    9059             :         case 4:
    9060        4620 :                 info->name = "size";
    9061        4620 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9062        4620 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    9063        4620 :                 info->far_ptr = & ((M_Layout *) node)->size;
    9064        4620 :                 return GF_OK;
    9065             :         case 5:
    9066        3405 :                 info->name = "horizontal";
    9067        3405 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9068        3405 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9069        3405 :                 info->far_ptr = & ((M_Layout *) node)->horizontal;
    9070        3405 :                 return GF_OK;
    9071             :         case 6:
    9072        4680 :                 info->name = "justify";
    9073        4680 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9074        4680 :                 info->fieldType = GF_SG_VRML_MFSTRING;
    9075        4680 :                 info->far_ptr = & ((M_Layout *) node)->justify;
    9076        4680 :                 return GF_OK;
    9077             :         case 7:
    9078        3330 :                 info->name = "leftToRight";
    9079        3330 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9080        3330 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9081        3330 :                 info->far_ptr = & ((M_Layout *) node)->leftToRight;
    9082        3330 :                 return GF_OK;
    9083             :         case 8:
    9084        3285 :                 info->name = "topToBottom";
    9085        3285 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9086        3285 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9087        3285 :                 info->far_ptr = & ((M_Layout *) node)->topToBottom;
    9088        3285 :                 return GF_OK;
    9089             :         case 9:
    9090        3435 :                 info->name = "spacing";
    9091        3435 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9092        3435 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9093        3435 :                 info->far_ptr = & ((M_Layout *) node)->spacing;
    9094        3435 :                 return GF_OK;
    9095             :         case 10:
    9096        2715 :                 info->name = "smoothScroll";
    9097        2715 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9098        2715 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9099        2715 :                 info->far_ptr = & ((M_Layout *) node)->smoothScroll;
    9100        2715 :                 return GF_OK;
    9101             :         case 11:
    9102        2715 :                 info->name = "loop";
    9103        2715 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9104        2715 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9105        2715 :                 info->far_ptr = & ((M_Layout *) node)->loop;
    9106        2715 :                 return GF_OK;
    9107             :         case 12:
    9108        2685 :                 info->name = "scrollVertical";
    9109        2685 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9110        2685 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9111        2685 :                 info->far_ptr = & ((M_Layout *) node)->scrollVertical;
    9112        2685 :                 return GF_OK;
    9113             :         case 13:
    9114        2882 :                 info->name = "scrollRate";
    9115        2882 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9116        2882 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9117        2882 :                 info->far_ptr = & ((M_Layout *) node)->scrollRate;
    9118        2882 :                 return GF_OK;
    9119             :         case 14:
    9120        2640 :                 info->name = "scrollMode";
    9121        2640 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9122        2640 :                 info->fieldType = GF_SG_VRML_SFINT32;
    9123        2640 :                 info->far_ptr = & ((M_Layout *) node)->scrollMode;
    9124        2640 :                 return GF_OK;
    9125             :         default:
    9126           0 :                 return GF_BAD_PARAM;
    9127             :         }
    9128       45687 : }
    9129             : 
    9130             : 
    9131             : static s32 Layout_get_field_index_by_name(char *name)
    9132             : {
    9133        6524 :         if (!strcmp("addChildren", name)) return 0;
    9134        3262 :         if (!strcmp("removeChildren", name)) return 1;
    9135        3822 :         if (!strcmp("children", name)) return 2;
    9136        3090 :         if (!strcmp("wrap", name)) return 3;
    9137        2874 :         if (!strcmp("size", name)) return 4;
    9138        1990 :         if (!strcmp("horizontal", name)) return 5;
    9139        2094 :         if (!strcmp("justify", name)) return 6;
    9140        1158 :         if (!strcmp("leftToRight", name)) return 7;
    9141         930 :         if (!strcmp("topToBottom", name)) return 8;
    9142         766 :         if (!strcmp("spacing", name)) return 9;
    9143         330 :         if (!strcmp("smoothScroll", name)) return 10;
    9144         278 :         if (!strcmp("loop", name)) return 11;
    9145         218 :         if (!strcmp("scrollVertical", name)) return 12;
    9146         228 :         if (!strcmp("scrollRate", name)) return 13;
    9147          64 :         if (!strcmp("scrollMode", name)) return 14;
    9148           0 :         return -1;
    9149        3262 : }
    9150             : static Bool Layout_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9151             : {
    9152           0 :         switch (FieldIndex) {
    9153             :         case 4:
    9154           0 :                 *AType = 12;
    9155           0 :                 *QType = 12;
    9156           0 :                 *b_min = FLT2FIX(0);
    9157           0 :                 *b_max = FIX_MAX;
    9158           0 :                 return 1;
    9159             :         case 9:
    9160           0 :                 *AType = 7;
    9161           0 :                 *QType = 0;
    9162           0 :                 *b_min = FLT2FIX(0);
    9163           0 :                 *b_max = FIX_MAX;
    9164           0 :                 return 1;
    9165             :         case 13:
    9166           0 :                 *AType = 7;
    9167           0 :                 *QType = 0;
    9168           0 :                 *b_min = FIX_MIN;
    9169           0 :                 *b_max = FIX_MAX;
    9170           0 :                 return 1;
    9171             :         case 14:
    9172           0 :                 *AType = 0;
    9173           0 :                 *QType = 13;
    9174           0 :                 *QT13_bits = 2;
    9175           0 :                 *b_min = FLT2FIX(-1);
    9176           0 :                 *b_max = FLT2FIX(1);
    9177           0 :                 return 1;
    9178             :         default:
    9179           0 :                 return 0;
    9180             :         }
    9181           0 : }
    9182             : 
    9183             : 
    9184             : 
    9185             : GF_Node *Layout_Create()
    9186             : {
    9187             :         M_Layout *p;
    9188        7560 :         GF_SAFEALLOC(p, M_Layout);
    9189        2520 :         if(!p) return NULL;
    9190        2520 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Layout);
    9191        2520 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    9192             : 
    9193             :         /*default field values*/
    9194        2520 :         p->size.x = FLT2FIX(-1);
    9195        2520 :         p->size.y = FLT2FIX(-1);
    9196        2520 :         p->horizontal = 1;
    9197        2520 :         p->justify.vals = (char**)gf_malloc(sizeof(SFString)*1);
    9198        2520 :         p->justify.count = 1;
    9199        2520 :         p->justify.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
    9200        2520 :         strcpy(p->justify.vals[0], "BEGIN");
    9201        2520 :         p->leftToRight = 1;
    9202        2520 :         p->topToBottom = 1;
    9203        2520 :         p->spacing = FLT2FIX(1);
    9204        2520 :         p->scrollVertical = 1;
    9205        2520 :         p->scrollRate = FLT2FIX(0);
    9206        2520 :         p->scrollMode = 0;
    9207        2520 :         return (GF_Node *)p;
    9208        2520 : }
    9209             : 
    9210             : 
    9211             : /*
    9212             :         LineProperties Node deletion
    9213             : */
    9214             : 
    9215             : static void LineProperties_Del(GF_Node *node)
    9216             : {
    9217        2696 :         M_LineProperties *p = (M_LineProperties *) node;
    9218        1348 :         gf_node_free((GF_Node *) p);
    9219        1348 : }
    9220             : 
    9221             : static const u16 LineProperties_Def2All[] = { 0, 1, 2};
    9222             : static const u16 LineProperties_In2All[] = { 0, 1, 2};
    9223             : static const u16 LineProperties_Out2All[] = { 0, 1, 2};
    9224             : static const u16 LineProperties_Dyn2All[] = { 0, 2};
    9225             : 
    9226             : static u32 LineProperties_get_field_count(GF_Node *node, u8 IndexMode)
    9227             : {
    9228        2566 :         switch(IndexMode) {
    9229             :         case GF_SG_FIELD_CODING_IN:
    9230           0 :                 return 3;
    9231             :         case GF_SG_FIELD_CODING_DEF:
    9232         618 :                 return 3;
    9233             :         case GF_SG_FIELD_CODING_OUT:
    9234           0 :                 return 3;
    9235             :         case GF_SG_FIELD_CODING_DYN:
    9236           0 :                 return 2;
    9237             :         default:
    9238         665 :                 return 3;
    9239             :         }
    9240        1283 : }
    9241             : 
    9242             : static GF_Err LineProperties_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9243             : {
    9244        1688 :         switch(IndexMode) {
    9245             :         case GF_SG_FIELD_CODING_IN:
    9246           0 :                 *allField = LineProperties_In2All[inField];
    9247           0 :                 return GF_OK;
    9248             :         case GF_SG_FIELD_CODING_DEF:
    9249         844 :                 *allField = LineProperties_Def2All[inField];
    9250         844 :                 return GF_OK;
    9251             :         case GF_SG_FIELD_CODING_OUT:
    9252           0 :                 *allField = LineProperties_Out2All[inField];
    9253           0 :                 return GF_OK;
    9254             :         case GF_SG_FIELD_CODING_DYN:
    9255           0 :                 *allField = LineProperties_Dyn2All[inField];
    9256           0 :                 return GF_OK;
    9257             :         default:
    9258           0 :                 return GF_BAD_PARAM;
    9259             :         }
    9260         844 : }
    9261             : static GF_Err LineProperties_get_field(GF_Node *node, GF_FieldInfo *info)
    9262             : {
    9263       11638 :         switch (info->fieldIndex) {
    9264             :         case 0:
    9265        2008 :                 info->name = "lineColor";
    9266        2008 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9267        2008 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9268        2008 :                 info->far_ptr = & ((M_LineProperties *) node)->lineColor;
    9269        2008 :                 return GF_OK;
    9270             :         case 1:
    9271        1609 :                 info->name = "lineStyle";
    9272        1609 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9273        1609 :                 info->fieldType = GF_SG_VRML_SFINT32;
    9274        1609 :                 info->far_ptr = & ((M_LineProperties *) node)->lineStyle;
    9275        1609 :                 return GF_OK;
    9276             :         case 2:
    9277        2202 :                 info->name = "width";
    9278        2202 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9279        2202 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9280        2202 :                 info->far_ptr = & ((M_LineProperties *) node)->width;
    9281        2202 :                 return GF_OK;
    9282             :         default:
    9283           0 :                 return GF_BAD_PARAM;
    9284             :         }
    9285        5819 : }
    9286             : 
    9287             : 
    9288             : static s32 LineProperties_get_field_index_by_name(char *name)
    9289             : {
    9290         668 :         if (!strcmp("lineColor", name)) return 0;
    9291         151 :         if (!strcmp("lineStyle", name)) return 1;
    9292         278 :         if (!strcmp("width", name)) return 2;
    9293           0 :         return -1;
    9294         271 : }
    9295             : static Bool LineProperties_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9296             : {
    9297           0 :         switch (FieldIndex) {
    9298             :         case 0:
    9299           0 :                 *AType = 4;
    9300           0 :                 *QType = 4;
    9301           0 :                 *b_min = FLT2FIX(0);
    9302           0 :                 *b_max = FLT2FIX(1);
    9303           0 :                 return 1;
    9304             :         case 1:
    9305           0 :                 *AType = 0;
    9306           0 :                 *QType = 13;
    9307           0 :                 *QT13_bits = 3;
    9308           0 :                 *b_min = FLT2FIX(0);
    9309           0 :                 *b_max = FLT2FIX(5);
    9310           0 :                 return 1;
    9311             :         case 2:
    9312           0 :                 *AType = 7;
    9313           0 :                 *QType = 12;
    9314           0 :                 *b_min = FLT2FIX(0);
    9315           0 :                 *b_max = FIX_MAX;
    9316           0 :                 return 1;
    9317             :         default:
    9318           0 :                 return 0;
    9319             :         }
    9320           0 : }
    9321             : 
    9322             : 
    9323             : 
    9324             : GF_Node *LineProperties_Create()
    9325             : {
    9326             :         M_LineProperties *p;
    9327        4044 :         GF_SAFEALLOC(p, M_LineProperties);
    9328        1348 :         if(!p) return NULL;
    9329        1348 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_LineProperties);
    9330             : 
    9331             :         /*default field values*/
    9332        1348 :         p->lineColor.red = FLT2FIX(0);
    9333        1348 :         p->lineColor.green = FLT2FIX(0);
    9334        1348 :         p->lineColor.blue = FLT2FIX(0);
    9335        1348 :         p->lineStyle = 0;
    9336        1348 :         p->width = FLT2FIX(1);
    9337        1348 :         return (GF_Node *)p;
    9338        1348 : }
    9339             : 
    9340             : 
    9341             : /*
    9342             :         ListeningPoint Node deletion
    9343             : */
    9344             : 
    9345             : static void ListeningPoint_Del(GF_Node *node)
    9346             : {
    9347           0 :         M_ListeningPoint *p = (M_ListeningPoint *) node;
    9348           0 :         gf_sg_sfstring_del(p->description);
    9349           0 :         gf_node_free((GF_Node *) p);
    9350           0 : }
    9351             : 
    9352             : static const u16 ListeningPoint_Def2All[] = { 1, 2, 3, 4};
    9353             : static const u16 ListeningPoint_In2All[] = { 0, 1, 2, 3};
    9354             : static const u16 ListeningPoint_Out2All[] = { 1, 2, 3, 5, 6};
    9355             : static const u16 ListeningPoint_Dyn2All[] = { 2, 3};
    9356             : 
    9357             : static u32 ListeningPoint_get_field_count(GF_Node *node, u8 IndexMode)
    9358             : {
    9359           0 :         switch(IndexMode) {
    9360             :         case GF_SG_FIELD_CODING_IN:
    9361           0 :                 return 4;
    9362             :         case GF_SG_FIELD_CODING_DEF:
    9363           0 :                 return 4;
    9364             :         case GF_SG_FIELD_CODING_OUT:
    9365           0 :                 return 5;
    9366             :         case GF_SG_FIELD_CODING_DYN:
    9367           0 :                 return 2;
    9368             :         default:
    9369           0 :                 return 7;
    9370             :         }
    9371           0 : }
    9372             : 
    9373             : static GF_Err ListeningPoint_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9374             : {
    9375           0 :         switch(IndexMode) {
    9376             :         case GF_SG_FIELD_CODING_IN:
    9377           0 :                 *allField = ListeningPoint_In2All[inField];
    9378           0 :                 return GF_OK;
    9379             :         case GF_SG_FIELD_CODING_DEF:
    9380           0 :                 *allField = ListeningPoint_Def2All[inField];
    9381           0 :                 return GF_OK;
    9382             :         case GF_SG_FIELD_CODING_OUT:
    9383           0 :                 *allField = ListeningPoint_Out2All[inField];
    9384           0 :                 return GF_OK;
    9385             :         case GF_SG_FIELD_CODING_DYN:
    9386           0 :                 *allField = ListeningPoint_Dyn2All[inField];
    9387           0 :                 return GF_OK;
    9388             :         default:
    9389           0 :                 return GF_BAD_PARAM;
    9390             :         }
    9391           0 : }
    9392             : static GF_Err ListeningPoint_get_field(GF_Node *node, GF_FieldInfo *info)
    9393             : {
    9394           0 :         switch (info->fieldIndex) {
    9395             :         case 0:
    9396           0 :                 info->name = "set_bind";
    9397           0 :                 info->eventType = GF_SG_EVENT_IN;
    9398           0 :                 info->on_event_in = ((M_ListeningPoint *)node)->on_set_bind;
    9399           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9400           0 :                 info->far_ptr = & ((M_ListeningPoint *) node)->set_bind;
    9401           0 :                 return GF_OK;
    9402             :         case 1:
    9403           0 :                 info->name = "jump";
    9404           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9405           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9406           0 :                 info->far_ptr = & ((M_ListeningPoint *) node)->jump;
    9407           0 :                 return GF_OK;
    9408             :         case 2:
    9409           0 :                 info->name = "orientation";
    9410           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9411           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
    9412           0 :                 info->far_ptr = & ((M_ListeningPoint *) node)->orientation;
    9413           0 :                 return GF_OK;
    9414             :         case 3:
    9415           0 :                 info->name = "position";
    9416           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9417           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    9418           0 :                 info->far_ptr = & ((M_ListeningPoint *) node)->position;
    9419           0 :                 return GF_OK;
    9420             :         case 4:
    9421           0 :                 info->name = "description";
    9422           0 :                 info->eventType = GF_SG_EVENT_FIELD;
    9423           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    9424           0 :                 info->far_ptr = & ((M_ListeningPoint *) node)->description;
    9425           0 :                 return GF_OK;
    9426             :         case 5:
    9427           0 :                 info->name = "bindTime";
    9428           0 :                 info->eventType = GF_SG_EVENT_OUT;
    9429           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
    9430           0 :                 info->far_ptr = & ((M_ListeningPoint *) node)->bindTime;
    9431           0 :                 return GF_OK;
    9432             :         case 6:
    9433           0 :                 info->name = "isBound";
    9434           0 :                 info->eventType = GF_SG_EVENT_OUT;
    9435           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9436           0 :                 info->far_ptr = & ((M_ListeningPoint *) node)->isBound;
    9437           0 :                 return GF_OK;
    9438             :         default:
    9439           0 :                 return GF_BAD_PARAM;
    9440             :         }
    9441           0 : }
    9442             : 
    9443             : 
    9444             : static s32 ListeningPoint_get_field_index_by_name(char *name)
    9445             : {
    9446           0 :         if (!strcmp("set_bind", name)) return 0;
    9447           0 :         if (!strcmp("jump", name)) return 1;
    9448           0 :         if (!strcmp("orientation", name)) return 2;
    9449           0 :         if (!strcmp("position", name)) return 3;
    9450           0 :         if (!strcmp("description", name)) return 4;
    9451           0 :         if (!strcmp("bindTime", name)) return 5;
    9452           0 :         if (!strcmp("isBound", name)) return 6;
    9453           0 :         return -1;
    9454           0 : }
    9455             : static Bool ListeningPoint_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9456             : {
    9457           0 :         switch (FieldIndex) {
    9458             :         case 2:
    9459           0 :                 *AType = 10;
    9460           0 :                 *QType = 10;
    9461           0 :                 return 1;
    9462             :         case 3:
    9463           0 :                 *AType = 1;
    9464           0 :                 *QType = 1;
    9465           0 :                 *b_min = FIX_MIN;
    9466           0 :                 *b_max = FIX_MAX;
    9467           0 :                 return 1;
    9468             :         default:
    9469           0 :                 return 0;
    9470             :         }
    9471           0 : }
    9472             : 
    9473             : 
    9474             : 
    9475             : GF_Node *ListeningPoint_Create()
    9476             : {
    9477             :         M_ListeningPoint *p;
    9478           0 :         GF_SAFEALLOC(p, M_ListeningPoint);
    9479           0 :         if(!p) return NULL;
    9480           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ListeningPoint);
    9481             : 
    9482             :         /*default field values*/
    9483           0 :         p->jump = 1;
    9484           0 :         p->orientation.x = FLT2FIX(0);
    9485           0 :         p->orientation.y = FLT2FIX(0);
    9486           0 :         p->orientation.z = FLT2FIX(1);
    9487           0 :         p->orientation.q = FLT2FIX(0);
    9488           0 :         p->position.x = FLT2FIX(0);
    9489           0 :         p->position.y = FLT2FIX(0);
    9490           0 :         p->position.z = FLT2FIX(10);
    9491           0 :         return (GF_Node *)p;
    9492           0 : }
    9493             : 
    9494             : 
    9495             : /*
    9496             :         Material Node deletion
    9497             : */
    9498             : 
    9499             : static void Material_Del(GF_Node *node)
    9500             : {
    9501        2838 :         M_Material *p = (M_Material *) node;
    9502        1419 :         gf_node_free((GF_Node *) p);
    9503        1419 : }
    9504             : 
    9505             : static const u16 Material_Def2All[] = { 0, 1, 2, 3, 4, 5};
    9506             : static const u16 Material_In2All[] = { 0, 1, 2, 3, 4, 5};
    9507             : static const u16 Material_Out2All[] = { 0, 1, 2, 3, 4, 5};
    9508             : static const u16 Material_Dyn2All[] = { 0, 1, 2, 3, 4, 5};
    9509             : 
    9510             : static u32 Material_get_field_count(GF_Node *node, u8 IndexMode)
    9511             : {
    9512        2976 :         switch(IndexMode) {
    9513             :         case GF_SG_FIELD_CODING_IN:
    9514         207 :                 return 6;
    9515             :         case GF_SG_FIELD_CODING_DEF:
    9516         621 :                 return 6;
    9517             :         case GF_SG_FIELD_CODING_OUT:
    9518           0 :                 return 6;
    9519             :         case GF_SG_FIELD_CODING_DYN:
    9520           0 :                 return 6;
    9521             :         default:
    9522         660 :                 return 6;
    9523             :         }
    9524        1488 : }
    9525             : 
    9526             : static GF_Err Material_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9527             : {
    9528        2870 :         switch(IndexMode) {
    9529             :         case GF_SG_FIELD_CODING_IN:
    9530         247 :                 *allField = Material_In2All[inField];
    9531         247 :                 return GF_OK;
    9532             :         case GF_SG_FIELD_CODING_DEF:
    9533        1188 :                 *allField = Material_Def2All[inField];
    9534        1188 :                 return GF_OK;
    9535             :         case GF_SG_FIELD_CODING_OUT:
    9536           0 :                 *allField = Material_Out2All[inField];
    9537           0 :                 return GF_OK;
    9538             :         case GF_SG_FIELD_CODING_DYN:
    9539           0 :                 *allField = Material_Dyn2All[inField];
    9540           0 :                 return GF_OK;
    9541             :         default:
    9542           0 :                 return GF_BAD_PARAM;
    9543             :         }
    9544        1435 : }
    9545             : static GF_Err Material_get_field(GF_Node *node, GF_FieldInfo *info)
    9546             : {
    9547       21876 :         switch (info->fieldIndex) {
    9548             :         case 0:
    9549        1596 :                 info->name = "ambientIntensity";
    9550        1596 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9551        1596 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9552        1596 :                 info->far_ptr = & ((M_Material *) node)->ambientIntensity;
    9553        1596 :                 return GF_OK;
    9554             :         case 1:
    9555        2768 :                 info->name = "diffuseColor";
    9556        2768 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9557        2768 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9558        2768 :                 info->far_ptr = & ((M_Material *) node)->diffuseColor;
    9559        2768 :                 return GF_OK;
    9560             :         case 2:
    9561        1641 :                 info->name = "emissiveColor";
    9562        1641 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9563        1641 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9564        1641 :                 info->far_ptr = & ((M_Material *) node)->emissiveColor;
    9565        1641 :                 return GF_OK;
    9566             :         case 3:
    9567        1671 :                 info->name = "shininess";
    9568        1671 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9569        1671 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9570        1671 :                 info->far_ptr = & ((M_Material *) node)->shininess;
    9571        1671 :                 return GF_OK;
    9572             :         case 4:
    9573        1596 :                 info->name = "specularColor";
    9574        1596 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9575        1596 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9576        1596 :                 info->far_ptr = & ((M_Material *) node)->specularColor;
    9577        1596 :                 return GF_OK;
    9578             :         case 5:
    9579        1666 :                 info->name = "transparency";
    9580        1666 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9581        1666 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9582        1666 :                 info->far_ptr = & ((M_Material *) node)->transparency;
    9583        1666 :                 return GF_OK;
    9584             :         default:
    9585           0 :                 return GF_BAD_PARAM;
    9586             :         }
    9587       10938 : }
    9588             : 
    9589             : 
    9590             : static s32 Material_get_field_index_by_name(char *name)
    9591             : {
    9592         760 :         if (!strcmp("ambientIntensity", name)) return 0;
    9593         700 :         if (!strcmp("diffuseColor", name)) return 1;
    9594          72 :         if (!strcmp("emissiveColor", name)) return 2;
    9595          68 :         if (!strcmp("shininess", name)) return 3;
    9596          28 :         if (!strcmp("specularColor", name)) return 4;
    9597          56 :         if (!strcmp("transparency", name)) return 5;
    9598           0 :         return -1;
    9599         380 : }
    9600             : static Bool Material_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9601             : {
    9602           0 :         switch (FieldIndex) {
    9603             :         case 0:
    9604           0 :                 *AType = 8;
    9605           0 :                 *QType = 4;
    9606           0 :                 *b_min = FLT2FIX(0);
    9607           0 :                 *b_max = FLT2FIX(1);
    9608           0 :                 return 1;
    9609             :         case 1:
    9610           0 :                 *AType = 4;
    9611           0 :                 *QType = 4;
    9612           0 :                 *b_min = FLT2FIX(0);
    9613           0 :                 *b_max = FLT2FIX(1);
    9614           0 :                 return 1;
    9615             :         case 2:
    9616           0 :                 *AType = 4;
    9617           0 :                 *QType = 4;
    9618           0 :                 *b_min = FLT2FIX(0);
    9619           0 :                 *b_max = FLT2FIX(1);
    9620           0 :                 return 1;
    9621             :         case 3:
    9622           0 :                 *AType = 8;
    9623           0 :                 *QType = 4;
    9624           0 :                 *b_min = FLT2FIX(0);
    9625           0 :                 *b_max = FLT2FIX(1);
    9626           0 :                 return 1;
    9627             :         case 4:
    9628           0 :                 *AType = 4;
    9629           0 :                 *QType = 4;
    9630           0 :                 *b_min = FLT2FIX(0);
    9631           0 :                 *b_max = FLT2FIX(1);
    9632           0 :                 return 1;
    9633             :         case 5:
    9634           0 :                 *AType = 8;
    9635           0 :                 *QType = 4;
    9636           0 :                 *b_min = FLT2FIX(0);
    9637           0 :                 *b_max = FLT2FIX(1);
    9638           0 :                 return 1;
    9639             :         default:
    9640           0 :                 return 0;
    9641             :         }
    9642           0 : }
    9643             : 
    9644             : 
    9645             : 
    9646             : GF_Node *Material_Create()
    9647             : {
    9648             :         M_Material *p;
    9649        4257 :         GF_SAFEALLOC(p, M_Material);
    9650        1419 :         if(!p) return NULL;
    9651        1419 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Material);
    9652             : 
    9653             :         /*default field values*/
    9654        1419 :         p->ambientIntensity = FLT2FIX(0.2);
    9655        1419 :         p->diffuseColor.red = FLT2FIX(0.8);
    9656        1419 :         p->diffuseColor.green = FLT2FIX(0.8);
    9657        1419 :         p->diffuseColor.blue = FLT2FIX(0.8);
    9658        1419 :         p->emissiveColor.red = FLT2FIX(0);
    9659        1419 :         p->emissiveColor.green = FLT2FIX(0);
    9660        1419 :         p->emissiveColor.blue = FLT2FIX(0);
    9661        1419 :         p->shininess = FLT2FIX(0.2);
    9662        1419 :         p->specularColor.red = FLT2FIX(0);
    9663        1419 :         p->specularColor.green = FLT2FIX(0);
    9664        1419 :         p->specularColor.blue = FLT2FIX(0);
    9665        1419 :         p->transparency = FLT2FIX(0);
    9666        1419 :         return (GF_Node *)p;
    9667        1419 : }
    9668             : 
    9669             : 
    9670             : /*
    9671             :         Material2D Node deletion
    9672             : */
    9673             : 
    9674             : static void Material2D_Del(GF_Node *node)
    9675             : {
    9676       34748 :         M_Material2D *p = (M_Material2D *) node;
    9677       17374 :         gf_node_unregister((GF_Node *) p->lineProps, (GF_Node *) p);
    9678       17374 :         gf_node_free((GF_Node *) p);
    9679       17374 : }
    9680             : 
    9681             : static const u16 Material2D_Def2All[] = { 0, 1, 2, 3};
    9682             : static const u16 Material2D_In2All[] = { 0, 1, 2, 3};
    9683             : static const u16 Material2D_Out2All[] = { 0, 1, 2, 3};
    9684             : static const u16 Material2D_Dyn2All[] = { 0, 3};
    9685             : 
    9686             : static u32 Material2D_get_field_count(GF_Node *node, u8 IndexMode)
    9687             : {
    9688       33724 :         switch(IndexMode) {
    9689             :         case GF_SG_FIELD_CODING_IN:
    9690         558 :                 return 4;
    9691             :         case GF_SG_FIELD_CODING_DEF:
    9692        6182 :                 return 4;
    9693             :         case GF_SG_FIELD_CODING_OUT:
    9694          18 :                 return 4;
    9695             :         case GF_SG_FIELD_CODING_DYN:
    9696           0 :                 return 2;
    9697             :         default:
    9698       10104 :                 return 4;
    9699             :         }
    9700       16862 : }
    9701             : 
    9702             : static GF_Err Material2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9703             : {
    9704       24884 :         switch(IndexMode) {
    9705             :         case GF_SG_FIELD_CODING_IN:
    9706         569 :                 *allField = Material2D_In2All[inField];
    9707         569 :                 return GF_OK;
    9708             :         case GF_SG_FIELD_CODING_DEF:
    9709       11855 :                 *allField = Material2D_Def2All[inField];
    9710       11855 :                 return GF_OK;
    9711             :         case GF_SG_FIELD_CODING_OUT:
    9712          18 :                 *allField = Material2D_Out2All[inField];
    9713          18 :                 return GF_OK;
    9714             :         case GF_SG_FIELD_CODING_DYN:
    9715           0 :                 *allField = Material2D_Dyn2All[inField];
    9716           0 :                 return GF_OK;
    9717             :         default:
    9718           0 :                 return GF_BAD_PARAM;
    9719             :         }
    9720       12442 : }
    9721             : static GF_Err Material2D_get_field(GF_Node *node, GF_FieldInfo *info)
    9722             : {
    9723      198888 :         switch (info->fieldIndex) {
    9724             :         case 0:
    9725       31752 :                 info->name = "emissiveColor";
    9726       31752 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9727       31752 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9728       31752 :                 info->far_ptr = & ((M_Material2D *) node)->emissiveColor;
    9729       31752 :                 return GF_OK;
    9730             :         case 1:
    9731       31053 :                 info->name = "filled";
    9732       31053 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9733       31053 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9734       31053 :                 info->far_ptr = & ((M_Material2D *) node)->filled;
    9735       31053 :                 return GF_OK;
    9736             :         case 2:
    9737       12888 :                 info->name = "lineProps";
    9738       12888 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9739       12888 :                 info->fieldType = GF_SG_VRML_SFNODE;
    9740       12888 :                 info->NDTtype = NDT_SFLinePropertiesNode;
    9741       12888 :                 info->far_ptr = & ((M_Material2D *)node)->lineProps;
    9742       12888 :                 return GF_OK;
    9743             :         case 3:
    9744       23751 :                 info->name = "transparency";
    9745       23751 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9746       23751 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9747       23751 :                 info->far_ptr = & ((M_Material2D *) node)->transparency;
    9748       23751 :                 return GF_OK;
    9749             :         default:
    9750           0 :                 return GF_BAD_PARAM;
    9751             :         }
    9752       99444 : }
    9753             : 
    9754             : 
    9755             : static s32 Material2D_get_field_index_by_name(char *name)
    9756             : {
    9757       11374 :         if (!strcmp("emissiveColor", name)) return 0;
    9758        4433 :         if (!strcmp("filled", name)) return 1;
    9759         729 :         if (!strcmp("lineProps", name)) return 2;
    9760         314 :         if (!strcmp("transparency", name)) return 3;
    9761           0 :         return -1;
    9762        4604 : }
    9763             : static Bool Material2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9764             : {
    9765          28 :         switch (FieldIndex) {
    9766             :         case 0:
    9767          14 :                 *AType = 4;
    9768          14 :                 *QType = 4;
    9769          14 :                 *b_min = FLT2FIX(0);
    9770          14 :                 *b_max = FLT2FIX(1);
    9771          14 :                 return 1;
    9772             :         case 3:
    9773           0 :                 *AType = 8;
    9774           0 :                 *QType = 4;
    9775           0 :                 *b_min = FLT2FIX(0);
    9776           0 :                 *b_max = FLT2FIX(1);
    9777           0 :                 return 1;
    9778             :         default:
    9779           0 :                 return 0;
    9780             :         }
    9781          14 : }
    9782             : 
    9783             : 
    9784             : 
    9785             : GF_Node *Material2D_Create()
    9786             : {
    9787             :         M_Material2D *p;
    9788       52122 :         GF_SAFEALLOC(p, M_Material2D);
    9789       17374 :         if(!p) return NULL;
    9790       17374 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Material2D);
    9791             : 
    9792             :         /*default field values*/
    9793       17374 :         p->emissiveColor.red = FLT2FIX(0.8);
    9794       17374 :         p->emissiveColor.green = FLT2FIX(0.8);
    9795       17374 :         p->emissiveColor.blue = FLT2FIX(0.8);
    9796       17374 :         p->transparency = FLT2FIX(0);
    9797       17374 :         return (GF_Node *)p;
    9798       17374 : }
    9799             : 
    9800             : 
    9801             : /*
    9802             :         MovieTexture Node deletion
    9803             : */
    9804             : 
    9805             : static void MovieTexture_Del(GF_Node *node)
    9806             : {
    9807        1104 :         M_MovieTexture *p = (M_MovieTexture *) node;
    9808         552 :         gf_sg_mfurl_del(p->url);
    9809         552 :         gf_node_free((GF_Node *) p);
    9810         552 : }
    9811             : 
    9812             : static const u16 MovieTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
    9813             : static const u16 MovieTexture_In2All[] = { 0, 1, 2, 3, 4};
    9814             : static const u16 MovieTexture_Out2All[] = { 0, 1, 2, 3, 4, 7, 8};
    9815             : static const u16 MovieTexture_Dyn2All[] = { 1};
    9816             : 
    9817             : static u32 MovieTexture_get_field_count(GF_Node *node, u8 IndexMode)
    9818             : {
    9819        1104 :         switch(IndexMode) {
    9820             :         case GF_SG_FIELD_CODING_IN:
    9821          54 :                 return 5;
    9822             :         case GF_SG_FIELD_CODING_DEF:
    9823         249 :                 return 7;
    9824             :         case GF_SG_FIELD_CODING_OUT:
    9825           0 :                 return 7;
    9826             :         case GF_SG_FIELD_CODING_DYN:
    9827           0 :                 return 1;
    9828             :         default:
    9829         249 :                 return 9;
    9830             :         }
    9831         552 : }
    9832             : 
    9833             : static GF_Err MovieTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9834             : {
    9835        1636 :         switch(IndexMode) {
    9836             :         case GF_SG_FIELD_CODING_IN:
    9837          84 :                 *allField = MovieTexture_In2All[inField];
    9838          84 :                 return GF_OK;
    9839             :         case GF_SG_FIELD_CODING_DEF:
    9840         734 :                 *allField = MovieTexture_Def2All[inField];
    9841         734 :                 return GF_OK;
    9842             :         case GF_SG_FIELD_CODING_OUT:
    9843           0 :                 *allField = MovieTexture_Out2All[inField];
    9844           0 :                 return GF_OK;
    9845             :         case GF_SG_FIELD_CODING_DYN:
    9846           0 :                 *allField = MovieTexture_Dyn2All[inField];
    9847           0 :                 return GF_OK;
    9848             :         default:
    9849           0 :                 return GF_BAD_PARAM;
    9850             :         }
    9851         818 : }
    9852             : static GF_Err MovieTexture_get_field(GF_Node *node, GF_FieldInfo *info)
    9853             : {
    9854       11802 :         switch (info->fieldIndex) {
    9855             :         case 0:
    9856         905 :                 info->name = "loop";
    9857         905 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9858         905 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9859         905 :                 info->far_ptr = & ((M_MovieTexture *) node)->loop;
    9860         905 :                 return GF_OK;
    9861             :         case 1:
    9862         612 :                 info->name = "speed";
    9863         612 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9864         612 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9865         612 :                 info->far_ptr = & ((M_MovieTexture *) node)->speed;
    9866         612 :                 return GF_OK;
    9867             :         case 2:
    9868         642 :                 info->name = "startTime";
    9869         642 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9870         642 :                 info->fieldType = GF_SG_VRML_SFTIME;
    9871         642 :                 info->far_ptr = & ((M_MovieTexture *) node)->startTime;
    9872         642 :                 return GF_OK;
    9873             :         case 3:
    9874         719 :                 info->name = "stopTime";
    9875         719 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9876         719 :                 info->fieldType = GF_SG_VRML_SFTIME;
    9877         719 :                 info->far_ptr = & ((M_MovieTexture *) node)->stopTime;
    9878         719 :                 return GF_OK;
    9879             :         case 4:
    9880        1083 :                 info->name = "url";
    9881        1083 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9882        1083 :                 info->fieldType = GF_SG_VRML_MFURL;
    9883        1083 :                 info->far_ptr = & ((M_MovieTexture *) node)->url;
    9884        1083 :                 return GF_OK;
    9885             :         case 5:
    9886         721 :                 info->name = "repeatS";
    9887         721 :                 info->eventType = GF_SG_EVENT_FIELD;
    9888         721 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9889         721 :                 info->far_ptr = & ((M_MovieTexture *) node)->repeatS;
    9890         721 :                 return GF_OK;
    9891             :         case 6:
    9892         721 :                 info->name = "repeatT";
    9893         721 :                 info->eventType = GF_SG_EVENT_FIELD;
    9894         721 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9895         721 :                 info->far_ptr = & ((M_MovieTexture *) node)->repeatT;
    9896         721 :                 return GF_OK;
    9897             :         case 7:
    9898         249 :                 info->name = "duration_changed";
    9899         249 :                 info->eventType = GF_SG_EVENT_OUT;
    9900         249 :                 info->fieldType = GF_SG_VRML_SFTIME;
    9901         249 :                 info->far_ptr = & ((M_MovieTexture *) node)->duration_changed;
    9902         249 :                 return GF_OK;
    9903             :         case 8:
    9904         249 :                 info->name = "isActive";
    9905         249 :                 info->eventType = GF_SG_EVENT_OUT;
    9906         249 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9907         249 :                 info->far_ptr = & ((M_MovieTexture *) node)->isActive;
    9908         249 :                 return GF_OK;
    9909             :         default:
    9910           0 :                 return GF_BAD_PARAM;
    9911             :         }
    9912        5901 : }
    9913             : 
    9914             : 
    9915             : static s32 MovieTexture_get_field_index_by_name(char *name)
    9916             : {
    9917         694 :         if (!strcmp("loop", name)) return 0;
    9918         224 :         if (!strcmp("speed", name)) return 1;
    9919         232 :         if (!strcmp("startTime", name)) return 2;
    9920         245 :         if (!strcmp("stopTime", name)) return 3;
    9921         314 :         if (!strcmp("url", name)) return 4;
    9922          90 :         if (!strcmp("repeatS", name)) return 5;
    9923          60 :         if (!strcmp("repeatT", name)) return 6;
    9924           0 :         if (!strcmp("duration_changed", name)) return 7;
    9925           0 :         if (!strcmp("isActive", name)) return 8;
    9926           0 :         return -1;
    9927         306 : }
    9928             : static Bool MovieTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9929             : {
    9930           0 :         switch (FieldIndex) {
    9931             :         case 1:
    9932           0 :                 *AType = 7;
    9933           0 :                 *QType = 0;
    9934           0 :                 *b_min = FIX_MIN;
    9935           0 :                 *b_max = FIX_MAX;
    9936           0 :                 return 1;
    9937             :         default:
    9938           0 :                 return 0;
    9939             :         }
    9940           0 : }
    9941             : 
    9942             : 
    9943             : 
    9944             : GF_Node *MovieTexture_Create()
    9945             : {
    9946             :         M_MovieTexture *p;
    9947        1656 :         GF_SAFEALLOC(p, M_MovieTexture);
    9948         552 :         if(!p) return NULL;
    9949         552 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MovieTexture);
    9950             : 
    9951             :         /*default field values*/
    9952         552 :         p->speed = FLT2FIX(1.0);
    9953         552 :         p->startTime = 0;
    9954         552 :         p->stopTime = 0;
    9955         552 :         p->repeatS = 1;
    9956         552 :         p->repeatT = 1;
    9957         552 :         return (GF_Node *)p;
    9958         552 : }
    9959             : 
    9960             : 
    9961             : /*
    9962             :         NavigationInfo Node deletion
    9963             : */
    9964             : 
    9965             : static void NavigationInfo_Del(GF_Node *node)
    9966             : {
    9967         520 :         M_NavigationInfo *p = (M_NavigationInfo *) node;
    9968         260 :         gf_sg_mffloat_del(p->avatarSize);
    9969         260 :         gf_sg_mfstring_del(p->type);
    9970         260 :         gf_node_free((GF_Node *) p);
    9971         260 : }
    9972             : 
    9973             : static const u16 NavigationInfo_Def2All[] = { 1, 2, 3, 4, 5};
    9974             : static const u16 NavigationInfo_In2All[] = { 0, 1, 2, 3, 4, 5};
    9975             : static const u16 NavigationInfo_Out2All[] = { 1, 2, 3, 4, 5, 6};
    9976             : static const u16 NavigationInfo_Dyn2All[] = { 5};
    9977             : 
    9978             : static u32 NavigationInfo_get_field_count(GF_Node *node, u8 IndexMode)
    9979             : {
    9980         460 :         switch(IndexMode) {
    9981             :         case GF_SG_FIELD_CODING_IN:
    9982           0 :                 return 6;
    9983             :         case GF_SG_FIELD_CODING_DEF:
    9984         126 :                 return 5;
    9985             :         case GF_SG_FIELD_CODING_OUT:
    9986           0 :                 return 6;
    9987             :         case GF_SG_FIELD_CODING_DYN:
    9988           0 :                 return 1;
    9989             :         default:
    9990         104 :                 return 7;
    9991             :         }
    9992         230 : }
    9993             : 
    9994             : static GF_Err NavigationInfo_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9995             : {
    9996         460 :         switch(IndexMode) {
    9997             :         case GF_SG_FIELD_CODING_IN:
    9998           0 :                 *allField = NavigationInfo_In2All[inField];
    9999           0 :                 return GF_OK;
   10000             :         case GF_SG_FIELD_CODING_DEF:
   10001         230 :                 *allField = NavigationInfo_Def2All[inField];
   10002         230 :                 return GF_OK;
   10003             :         case GF_SG_FIELD_CODING_OUT:
   10004           0 :                 *allField = NavigationInfo_Out2All[inField];
   10005           0 :                 return GF_OK;
   10006             :         case GF_SG_FIELD_CODING_DYN:
   10007           0 :                 *allField = NavigationInfo_Dyn2All[inField];
   10008           0 :                 return GF_OK;
   10009             :         default:
   10010           0 :                 return GF_BAD_PARAM;
   10011             :         }
   10012         230 : }
   10013             : static GF_Err NavigationInfo_get_field(GF_Node *node, GF_FieldInfo *info)
   10014             : {
   10015        3596 :         switch (info->fieldIndex) {
   10016             :         case 0:
   10017         104 :                 info->name = "set_bind";
   10018         104 :                 info->eventType = GF_SG_EVENT_IN;
   10019         104 :                 info->on_event_in = ((M_NavigationInfo *)node)->on_set_bind;
   10020         104 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10021         104 :                 info->far_ptr = & ((M_NavigationInfo *) node)->set_bind;
   10022         104 :                 return GF_OK;
   10023             :         case 1:
   10024         279 :                 info->name = "avatarSize";
   10025         279 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10026         279 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   10027         279 :                 info->far_ptr = & ((M_NavigationInfo *) node)->avatarSize;
   10028         279 :                 return GF_OK;
   10029             :         case 2:
   10030         339 :                 info->name = "headlight";
   10031         339 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10032         339 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10033         339 :                 info->far_ptr = & ((M_NavigationInfo *) node)->headlight;
   10034         339 :                 return GF_OK;
   10035             :         case 3:
   10036         264 :                 info->name = "speed";
   10037         264 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10038         264 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   10039         264 :                 info->far_ptr = & ((M_NavigationInfo *) node)->speed;
   10040         264 :                 return GF_OK;
   10041             :         case 4:
   10042         444 :                 info->name = "type";
   10043         444 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10044         444 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   10045         444 :                 info->far_ptr = & ((M_NavigationInfo *) node)->type;
   10046         444 :                 return GF_OK;
   10047             :         case 5:
   10048         264 :                 info->name = "visibilityLimit";
   10049         264 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10050         264 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   10051         264 :                 info->far_ptr = & ((M_NavigationInfo *) node)->visibilityLimit;
   10052         264 :                 return GF_OK;
   10053             :         case 6:
   10054         104 :                 info->name = "isBound";
   10055         104 :                 info->eventType = GF_SG_EVENT_OUT;
   10056         104 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10057         104 :                 info->far_ptr = & ((M_NavigationInfo *) node)->isBound;
   10058         104 :                 return GF_OK;
   10059             :         default:
   10060           0 :                 return GF_BAD_PARAM;
   10061             :         }
   10062        1798 : }
   10063             : 
   10064             : 
   10065             : static s32 NavigationInfo_get_field_index_by_name(char *name)
   10066             : {
   10067         144 :         if (!strcmp("set_bind", name)) return 0;
   10068          76 :         if (!strcmp("avatarSize", name)) return 1;
   10069          88 :         if (!strcmp("headlight", name)) return 2;
   10070          48 :         if (!strcmp("speed", name)) return 3;
   10071          96 :         if (!strcmp("type", name)) return 4;
   10072           0 :         if (!strcmp("visibilityLimit", name)) return 5;
   10073           0 :         if (!strcmp("isBound", name)) return 6;
   10074           0 :         return -1;
   10075          72 : }
   10076             : static Bool NavigationInfo_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10077             : {
   10078           0 :         switch (FieldIndex) {
   10079             :         case 1:
   10080           0 :                 *AType = 0;
   10081           0 :                 *QType = 11;
   10082           0 :                 *b_min = FLT2FIX(0);
   10083           0 :                 *b_max = FIX_MAX;
   10084           0 :                 return 1;
   10085             :         case 3:
   10086           0 :                 *AType = 0;
   10087           0 :                 *QType = 0;
   10088           0 :                 *b_min = FLT2FIX(0);
   10089           0 :                 *b_max = FIX_MAX;
   10090           0 :                 return 1;
   10091             :         case 5:
   10092           0 :                 *AType = 7;
   10093           0 :                 *QType = 11;
   10094           0 :                 *b_min = FLT2FIX(0);
   10095           0 :                 *b_max = FIX_MAX;
   10096           0 :                 return 1;
   10097             :         default:
   10098           0 :                 return 0;
   10099             :         }
   10100           0 : }
   10101             : 
   10102             : 
   10103             : 
   10104             : GF_Node *NavigationInfo_Create()
   10105             : {
   10106             :         M_NavigationInfo *p;
   10107         780 :         GF_SAFEALLOC(p, M_NavigationInfo);
   10108         260 :         if(!p) return NULL;
   10109         260 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NavigationInfo);
   10110             : 
   10111             :         /*default field values*/
   10112         260 :         p->avatarSize.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*3);
   10113         260 :         p->avatarSize.count = 3;
   10114         260 :         p->avatarSize.vals[0] = FLT2FIX(0.25);
   10115         260 :         p->avatarSize.vals[1] = FLT2FIX(1.6);
   10116         260 :         p->avatarSize.vals[2] = FLT2FIX(0.75);
   10117         260 :         p->headlight = 1;
   10118         260 :         p->speed = FLT2FIX(1.0);
   10119         260 :         p->type.vals = (char**)gf_malloc(sizeof(SFString)*2);
   10120         260 :         p->type.count = 2;
   10121         260 :         p->type.vals[0] = (char*)gf_malloc(sizeof(char) * 5);
   10122         260 :         strcpy(p->type.vals[0], "WALK");
   10123         260 :         p->type.vals[1] = (char*)gf_malloc(sizeof(char) * 4);
   10124         260 :         strcpy(p->type.vals[1], "ANY");
   10125         260 :         p->visibilityLimit = FLT2FIX(0.0);
   10126         260 :         return (GF_Node *)p;
   10127         260 : }
   10128             : 
   10129             : 
   10130             : /*
   10131             :         Normal Node deletion
   10132             : */
   10133             : 
   10134             : static void Normal_Del(GF_Node *node)
   10135             : {
   10136           0 :         M_Normal *p = (M_Normal *) node;
   10137           0 :         gf_sg_mfvec3f_del(p->vector);
   10138           0 :         gf_node_free((GF_Node *) p);
   10139           0 : }
   10140             : 
   10141             : static const u16 Normal_Def2All[] = { 0};
   10142             : static const u16 Normal_In2All[] = { 0};
   10143             : static const u16 Normal_Out2All[] = { 0};
   10144             : static const u16 Normal_Dyn2All[] = { 0};
   10145             : 
   10146             : static u32 Normal_get_field_count(GF_Node *node, u8 IndexMode)
   10147             : {
   10148           0 :         switch(IndexMode) {
   10149             :         case GF_SG_FIELD_CODING_IN:
   10150           0 :                 return 1;
   10151             :         case GF_SG_FIELD_CODING_DEF:
   10152           0 :                 return 1;
   10153             :         case GF_SG_FIELD_CODING_OUT:
   10154           0 :                 return 1;
   10155             :         case GF_SG_FIELD_CODING_DYN:
   10156           0 :                 return 1;
   10157             :         default:
   10158           0 :                 return 1;
   10159             :         }
   10160           0 : }
   10161             : 
   10162             : static GF_Err Normal_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10163             : {
   10164           0 :         switch(IndexMode) {
   10165             :         case GF_SG_FIELD_CODING_IN:
   10166           0 :                 *allField = Normal_In2All[inField];
   10167           0 :                 return GF_OK;
   10168             :         case GF_SG_FIELD_CODING_DEF:
   10169           0 :                 *allField = Normal_Def2All[inField];
   10170           0 :                 return GF_OK;
   10171             :         case GF_SG_FIELD_CODING_OUT:
   10172           0 :                 *allField = Normal_Out2All[inField];
   10173           0 :                 return GF_OK;
   10174             :         case GF_SG_FIELD_CODING_DYN:
   10175           0 :                 *allField = Normal_Dyn2All[inField];
   10176           0 :                 return GF_OK;
   10177             :         default:
   10178           0 :                 return GF_BAD_PARAM;
   10179             :         }
   10180           0 : }
   10181             : static GF_Err Normal_get_field(GF_Node *node, GF_FieldInfo *info)
   10182             : {
   10183           0 :         switch (info->fieldIndex) {
   10184             :         case 0:
   10185           0 :                 info->name = "vector";
   10186           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10187           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   10188           0 :                 info->far_ptr = & ((M_Normal *) node)->vector;
   10189           0 :                 return GF_OK;
   10190             :         default:
   10191           0 :                 return GF_BAD_PARAM;
   10192             :         }
   10193           0 : }
   10194             : 
   10195             : 
   10196             : static s32 Normal_get_field_index_by_name(char *name)
   10197             : {
   10198           0 :         if (!strcmp("vector", name)) return 0;
   10199           0 :         return -1;
   10200           0 : }
   10201             : static Bool Normal_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10202             : {
   10203           0 :         switch (FieldIndex) {
   10204             :         case 0:
   10205           0 :                 *AType = 9;
   10206           0 :                 *QType = 9;
   10207           0 :                 return 1;
   10208             :         default:
   10209           0 :                 return 0;
   10210             :         }
   10211           0 : }
   10212             : 
   10213             : 
   10214             : 
   10215             : GF_Node *Normal_Create()
   10216             : {
   10217             :         M_Normal *p;
   10218           0 :         GF_SAFEALLOC(p, M_Normal);
   10219           0 :         if(!p) return NULL;
   10220           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Normal);
   10221             : 
   10222             :         /*default field values*/
   10223           0 :         return (GF_Node *)p;
   10224           0 : }
   10225             : 
   10226             : 
   10227             : /*
   10228             :         NormalInterpolator Node deletion
   10229             : */
   10230             : 
   10231             : static void NormalInterpolator_Del(GF_Node *node)
   10232             : {
   10233           0 :         M_NormalInterpolator *p = (M_NormalInterpolator *) node;
   10234           0 :         gf_sg_mffloat_del(p->key);
   10235           0 :         gf_sg_mfvec3f_del(p->keyValue);
   10236           0 :         gf_sg_mfvec3f_del(p->value_changed);
   10237           0 :         gf_node_free((GF_Node *) p);
   10238           0 : }
   10239             : 
   10240             : static const u16 NormalInterpolator_Def2All[] = { 1, 2};
   10241             : static const u16 NormalInterpolator_In2All[] = { 0, 1, 2};
   10242             : static const u16 NormalInterpolator_Out2All[] = { 1, 2, 3};
   10243             : 
   10244             : static u32 NormalInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
   10245             : {
   10246           0 :         switch(IndexMode) {
   10247             :         case GF_SG_FIELD_CODING_IN:
   10248           0 :                 return 3;
   10249             :         case GF_SG_FIELD_CODING_DEF:
   10250           0 :                 return 2;
   10251             :         case GF_SG_FIELD_CODING_OUT:
   10252           0 :                 return 3;
   10253             :         case GF_SG_FIELD_CODING_DYN:
   10254           0 :                 return 0;
   10255             :         default:
   10256           0 :                 return 4;
   10257             :         }
   10258           0 : }
   10259             : 
   10260             : static GF_Err NormalInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10261             : {
   10262           0 :         switch(IndexMode) {
   10263             :         case GF_SG_FIELD_CODING_IN:
   10264           0 :                 *allField = NormalInterpolator_In2All[inField];
   10265           0 :                 return GF_OK;
   10266             :         case GF_SG_FIELD_CODING_DEF:
   10267           0 :                 *allField = NormalInterpolator_Def2All[inField];
   10268           0 :                 return GF_OK;
   10269             :         case GF_SG_FIELD_CODING_OUT:
   10270           0 :                 *allField = NormalInterpolator_Out2All[inField];
   10271           0 :                 return GF_OK;
   10272             :         default:
   10273           0 :                 return GF_BAD_PARAM;
   10274             :         }
   10275           0 : }
   10276             : static GF_Err NormalInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
   10277             : {
   10278           0 :         switch (info->fieldIndex) {
   10279             :         case 0:
   10280           0 :                 info->name = "set_fraction";
   10281           0 :                 info->eventType = GF_SG_EVENT_IN;
   10282           0 :                 info->on_event_in = ((M_NormalInterpolator *)node)->on_set_fraction;
   10283           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   10284           0 :                 info->far_ptr = & ((M_NormalInterpolator *) node)->set_fraction;
   10285           0 :                 return GF_OK;
   10286             :         case 1:
   10287           0 :                 info->name = "key";
   10288           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10289           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   10290           0 :                 info->far_ptr = & ((M_NormalInterpolator *) node)->key;
   10291           0 :                 return GF_OK;
   10292             :         case 2:
   10293           0 :                 info->name = "keyValue";
   10294           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10295           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   10296           0 :                 info->far_ptr = & ((M_NormalInterpolator *) node)->keyValue;
   10297           0 :                 return GF_OK;
   10298             :         case 3:
   10299           0 :                 info->name = "value_changed";
   10300           0 :                 info->eventType = GF_SG_EVENT_OUT;
   10301           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   10302           0 :                 info->far_ptr = & ((M_NormalInterpolator *) node)->value_changed;
   10303           0 :                 return GF_OK;
   10304             :         default:
   10305           0 :                 return GF_BAD_PARAM;
   10306             :         }
   10307           0 : }
   10308             : 
   10309             : 
   10310             : static s32 NormalInterpolator_get_field_index_by_name(char *name)
   10311             : {
   10312           0 :         if (!strcmp("set_fraction", name)) return 0;
   10313           0 :         if (!strcmp("key", name)) return 1;
   10314           0 :         if (!strcmp("keyValue", name)) return 2;
   10315           0 :         if (!strcmp("value_changed", name)) return 3;
   10316           0 :         return -1;
   10317           0 : }
   10318             : static Bool NormalInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10319             : {
   10320           0 :         switch (FieldIndex) {
   10321             :         case 1:
   10322           0 :                 *AType = 0;
   10323           0 :                 *QType = 8;
   10324           0 :                 *b_min = FLT2FIX(0);
   10325           0 :                 *b_max = FLT2FIX(1);
   10326           0 :                 return 1;
   10327             :         case 2:
   10328           0 :                 *AType = 0;
   10329           0 :                 *QType = 9;
   10330           0 :                 *b_min = FIX_MIN;
   10331           0 :                 *b_max = FIX_MAX;
   10332           0 :                 return 1;
   10333             :         default:
   10334           0 :                 return 0;
   10335             :         }
   10336           0 : }
   10337             : 
   10338             : 
   10339             : 
   10340             : GF_Node *NormalInterpolator_Create()
   10341             : {
   10342             :         M_NormalInterpolator *p;
   10343           0 :         GF_SAFEALLOC(p, M_NormalInterpolator);
   10344           0 :         if(!p) return NULL;
   10345           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NormalInterpolator);
   10346             : 
   10347             :         /*default field values*/
   10348           0 :         return (GF_Node *)p;
   10349           0 : }
   10350             : 
   10351             : 
   10352             : /*
   10353             :         OrderedGroup Node deletion
   10354             : */
   10355             : 
   10356             : static void OrderedGroup_Del(GF_Node *node)
   10357             : {
   10358        9508 :         M_OrderedGroup *p = (M_OrderedGroup *) node;
   10359        4754 :         gf_sg_mffloat_del(p->order);
   10360        4754 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   10361        4754 :         gf_node_free((GF_Node *) p);
   10362        4754 : }
   10363             : 
   10364             : static const u16 OrderedGroup_Def2All[] = { 2, 3};
   10365             : static const u16 OrderedGroup_In2All[] = { 0, 1, 2, 3};
   10366             : static const u16 OrderedGroup_Out2All[] = { 2, 3};
   10367             : 
   10368             : static u32 OrderedGroup_get_field_count(GF_Node *node, u8 IndexMode)
   10369             : {
   10370        8562 :         switch(IndexMode) {
   10371             :         case GF_SG_FIELD_CODING_IN:
   10372          18 :                 return 4;
   10373             :         case GF_SG_FIELD_CODING_DEF:
   10374        2450 :                 return 2;
   10375             :         case GF_SG_FIELD_CODING_OUT:
   10376           0 :                 return 2;
   10377             :         case GF_SG_FIELD_CODING_DYN:
   10378           0 :                 return 0;
   10379             :         default:
   10380        1813 :                 return 4;
   10381             :         }
   10382        4281 : }
   10383             : 
   10384             : static GF_Err OrderedGroup_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10385             : {
   10386        4972 :         switch(IndexMode) {
   10387             :         case GF_SG_FIELD_CODING_IN:
   10388          26 :                 *allField = OrderedGroup_In2All[inField];
   10389          26 :                 return GF_OK;
   10390             :         case GF_SG_FIELD_CODING_DEF:
   10391        2460 :                 *allField = OrderedGroup_Def2All[inField];
   10392        2460 :                 return GF_OK;
   10393             :         case GF_SG_FIELD_CODING_OUT:
   10394           0 :                 *allField = OrderedGroup_Out2All[inField];
   10395           0 :                 return GF_OK;
   10396             :         default:
   10397           0 :                 return GF_BAD_PARAM;
   10398             :         }
   10399        2486 : }
   10400             : static GF_Err OrderedGroup_get_field(GF_Node *node, GF_FieldInfo *info)
   10401             : {
   10402       29590 :         switch (info->fieldIndex) {
   10403             :         case 0:
   10404        1813 :                 info->name = "addChildren";
   10405        1813 :                 info->eventType = GF_SG_EVENT_IN;
   10406        1813 :                 info->on_event_in = ((M_OrderedGroup *)node)->on_addChildren;
   10407        1813 :                 info->fieldType = GF_SG_VRML_MFNODE;
   10408        1813 :                 info->NDTtype = NDT_SF3DNode;
   10409        1813 :                 info->far_ptr = & ((M_OrderedGroup *)node)->addChildren;
   10410        1813 :                 return GF_OK;
   10411             :         case 1:
   10412        1813 :                 info->name = "removeChildren";
   10413        1813 :                 info->eventType = GF_SG_EVENT_IN;
   10414        1813 :                 info->on_event_in = ((M_OrderedGroup *)node)->on_removeChildren;
   10415        1813 :                 info->fieldType = GF_SG_VRML_MFNODE;
   10416        1813 :                 info->NDTtype = NDT_SF3DNode;
   10417        1813 :                 info->far_ptr = & ((M_OrderedGroup *)node)->removeChildren;
   10418        1813 :                 return GF_OK;
   10419             :         case 2:
   10420        6277 :                 info->name = "children";
   10421        6277 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10422        6277 :                 info->fieldType = GF_SG_VRML_MFNODE;
   10423        6277 :                 info->NDTtype = NDT_SF3DNode;
   10424        6277 :                 info->far_ptr = & ((M_OrderedGroup *)node)->children;
   10425        6277 :                 return GF_OK;
   10426             :         case 3:
   10427        4892 :                 info->name = "order";
   10428        4892 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10429        4892 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   10430        4892 :                 info->far_ptr = & ((M_OrderedGroup *) node)->order;
   10431        4892 :                 return GF_OK;
   10432             :         default:
   10433           0 :                 return GF_BAD_PARAM;
   10434             :         }
   10435       14795 : }
   10436             : 
   10437             : 
   10438             : static s32 OrderedGroup_get_field_index_by_name(char *name)
   10439             : {
   10440        2086 :         if (!strcmp("addChildren", name)) return 0;
   10441        1043 :         if (!strcmp("removeChildren", name)) return 1;
   10442        2069 :         if (!strcmp("children", name)) return 2;
   10443          33 :         if (!strcmp("order", name)) return 3;
   10444           1 :         return -1;
   10445        1043 : }
   10446             : static Bool OrderedGroup_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10447             : {
   10448           0 :         switch (FieldIndex) {
   10449             :         case 3:
   10450           0 :                 *AType = 0;
   10451           0 :                 *QType = 3;
   10452           0 :                 *b_min = FLT2FIX(0);
   10453           0 :                 *b_max = FIX_MAX;
   10454           0 :                 return 1;
   10455             :         default:
   10456           0 :                 return 0;
   10457             :         }
   10458           0 : }
   10459             : 
   10460             : 
   10461             : 
   10462             : GF_Node *OrderedGroup_Create()
   10463             : {
   10464             :         M_OrderedGroup *p;
   10465       14262 :         GF_SAFEALLOC(p, M_OrderedGroup);
   10466        4754 :         if(!p) return NULL;
   10467        4754 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_OrderedGroup);
   10468        4754 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   10469             : 
   10470             :         /*default field values*/
   10471        4754 :         return (GF_Node *)p;
   10472        4754 : }
   10473             : 
   10474             : 
   10475             : /*
   10476             :         OrientationInterpolator Node deletion
   10477             : */
   10478             : 
   10479             : static void OrientationInterpolator_Del(GF_Node *node)
   10480             : {
   10481         578 :         M_OrientationInterpolator *p = (M_OrientationInterpolator *) node;
   10482         289 :         gf_sg_mffloat_del(p->key);
   10483         289 :         gf_sg_mfrotation_del(p->keyValue);
   10484         289 :         gf_node_free((GF_Node *) p);
   10485         289 : }
   10486             : 
   10487             : static const u16 OrientationInterpolator_Def2All[] = { 1, 2};
   10488             : static const u16 OrientationInterpolator_In2All[] = { 0, 1, 2};
   10489             : static const u16 OrientationInterpolator_Out2All[] = { 1, 2, 3};
   10490             : 
   10491             : static u32 OrientationInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
   10492             : {
   10493        1108 :         switch(IndexMode) {
   10494             :         case GF_SG_FIELD_CODING_IN:
   10495         144 :                 return 3;
   10496             :         case GF_SG_FIELD_CODING_DEF:
   10497         144 :                 return 2;
   10498             :         case GF_SG_FIELD_CODING_OUT:
   10499         153 :                 return 3;
   10500             :         case GF_SG_FIELD_CODING_DYN:
   10501           0 :                 return 0;
   10502             :         default:
   10503         113 :                 return 4;
   10504             :         }
   10505         554 : }
   10506             : 
   10507             : static GF_Err OrientationInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10508             : {
   10509        1046 :         switch(IndexMode) {
   10510             :         case GF_SG_FIELD_CODING_IN:
   10511         112 :                 *allField = OrientationInterpolator_In2All[inField];
   10512         112 :                 return GF_OK;
   10513             :         case GF_SG_FIELD_CODING_DEF:
   10514         224 :                 *allField = OrientationInterpolator_Def2All[inField];
   10515         224 :                 return GF_OK;
   10516             :         case GF_SG_FIELD_CODING_OUT:
   10517         187 :                 *allField = OrientationInterpolator_Out2All[inField];
   10518         187 :                 return GF_OK;
   10519             :         default:
   10520           0 :                 return GF_BAD_PARAM;
   10521             :         }
   10522         523 : }
   10523             : static GF_Err OrientationInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
   10524             : {
   10525        3100 :         switch (info->fieldIndex) {
   10526             :         case 0:
   10527         241 :                 info->name = "set_fraction";
   10528         241 :                 info->eventType = GF_SG_EVENT_IN;
   10529         241 :                 info->on_event_in = ((M_OrientationInterpolator *)node)->on_set_fraction;
   10530         241 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   10531         241 :                 info->far_ptr = & ((M_OrientationInterpolator *) node)->set_fraction;
   10532         241 :                 return GF_OK;
   10533             :         case 1:
   10534         530 :                 info->name = "key";
   10535         530 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10536         530 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   10537         530 :                 info->far_ptr = & ((M_OrientationInterpolator *) node)->key;
   10538         530 :                 return GF_OK;
   10539             :         case 2:
   10540         530 :                 info->name = "keyValue";
   10541         530 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10542         530 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   10543         530 :                 info->far_ptr = & ((M_OrientationInterpolator *) node)->keyValue;
   10544         530 :                 return GF_OK;
   10545             :         case 3:
   10546         249 :                 info->name = "value_changed";
   10547         249 :                 info->eventType = GF_SG_EVENT_OUT;
   10548         249 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   10549         249 :                 info->far_ptr = & ((M_OrientationInterpolator *) node)->value_changed;
   10550         249 :                 return GF_OK;
   10551             :         default:
   10552           0 :                 return GF_BAD_PARAM;
   10553             :         }
   10554        1550 : }
   10555             : 
   10556             : 
   10557             : static s32 OrientationInterpolator_get_field_index_by_name(char *name)
   10558             : {
   10559         584 :         if (!strcmp("set_fraction", name)) return 0;
   10560         260 :         if (!strcmp("key", name)) return 1;
   10561         196 :         if (!strcmp("keyValue", name)) return 2;
   10562         136 :         if (!strcmp("value_changed", name)) return 3;
   10563           0 :         return -1;
   10564         260 : }
   10565             : static Bool OrientationInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10566             : {
   10567           0 :         switch (FieldIndex) {
   10568             :         case 1:
   10569           0 :                 *AType = 0;
   10570           0 :                 *QType = 8;
   10571           0 :                 *b_min = FLT2FIX(0);
   10572           0 :                 *b_max = FLT2FIX(1);
   10573           0 :                 return 1;
   10574             :         case 2:
   10575           0 :                 *AType = 0;
   10576           0 :                 *QType = 10;
   10577           0 :                 *b_min = FIX_MIN;
   10578           0 :                 *b_max = FIX_MAX;
   10579           0 :                 return 1;
   10580             :         default:
   10581           0 :                 return 0;
   10582             :         }
   10583           0 : }
   10584             : 
   10585             : 
   10586             : 
   10587             : GF_Node *OrientationInterpolator_Create()
   10588             : {
   10589             :         M_OrientationInterpolator *p;
   10590         867 :         GF_SAFEALLOC(p, M_OrientationInterpolator);
   10591         289 :         if(!p) return NULL;
   10592         289 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_OrientationInterpolator);
   10593             : 
   10594             :         /*default field values*/
   10595         289 :         return (GF_Node *)p;
   10596         289 : }
   10597             : 
   10598             : 
   10599             : /*
   10600             :         PixelTexture Node deletion
   10601             : */
   10602             : 
   10603             : static void PixelTexture_Del(GF_Node *node)
   10604             : {
   10605         144 :         M_PixelTexture *p = (M_PixelTexture *) node;
   10606          72 :         gf_sg_sfimage_del(p->image);
   10607          72 :         gf_node_free((GF_Node *) p);
   10608          72 : }
   10609             : 
   10610             : static const u16 PixelTexture_Def2All[] = { 0, 1, 2};
   10611             : static const u16 PixelTexture_In2All[] = { 0};
   10612             : static const u16 PixelTexture_Out2All[] = { 0};
   10613             : 
   10614             : static u32 PixelTexture_get_field_count(GF_Node *node, u8 IndexMode)
   10615             : {
   10616         128 :         switch(IndexMode) {
   10617             :         case GF_SG_FIELD_CODING_IN:
   10618           0 :                 return 1;
   10619             :         case GF_SG_FIELD_CODING_DEF:
   10620          36 :                 return 3;
   10621             :         case GF_SG_FIELD_CODING_OUT:
   10622           0 :                 return 1;
   10623             :         case GF_SG_FIELD_CODING_DYN:
   10624           0 :                 return 0;
   10625             :         default:
   10626          28 :                 return 3;
   10627             :         }
   10628          64 : }
   10629             : 
   10630             : static GF_Err PixelTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10631             : {
   10632          88 :         switch(IndexMode) {
   10633             :         case GF_SG_FIELD_CODING_IN:
   10634           0 :                 *allField = PixelTexture_In2All[inField];
   10635           0 :                 return GF_OK;
   10636             :         case GF_SG_FIELD_CODING_DEF:
   10637          44 :                 *allField = PixelTexture_Def2All[inField];
   10638          44 :                 return GF_OK;
   10639             :         case GF_SG_FIELD_CODING_OUT:
   10640           0 :                 *allField = PixelTexture_Out2All[inField];
   10641           0 :                 return GF_OK;
   10642             :         default:
   10643           0 :                 return GF_BAD_PARAM;
   10644             :         }
   10645          44 : }
   10646             : static GF_Err PixelTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   10647             : {
   10648         552 :         switch (info->fieldIndex) {
   10649             :         case 0:
   10650         132 :                 info->name = "image";
   10651         132 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10652         132 :                 info->fieldType = GF_SG_VRML_SFIMAGE;
   10653         132 :                 info->far_ptr = & ((M_PixelTexture *) node)->image;
   10654         132 :                 return GF_OK;
   10655             :         case 1:
   10656          72 :                 info->name = "repeatS";
   10657          72 :                 info->eventType = GF_SG_EVENT_FIELD;
   10658          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10659          72 :                 info->far_ptr = & ((M_PixelTexture *) node)->repeatS;
   10660          72 :                 return GF_OK;
   10661             :         case 2:
   10662          72 :                 info->name = "repeatT";
   10663          72 :                 info->eventType = GF_SG_EVENT_FIELD;
   10664          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10665          72 :                 info->far_ptr = & ((M_PixelTexture *) node)->repeatT;
   10666          72 :                 return GF_OK;
   10667             :         default:
   10668           0 :                 return GF_BAD_PARAM;
   10669             :         }
   10670         276 : }
   10671             : 
   10672             : 
   10673             : static s32 PixelTexture_get_field_index_by_name(char *name)
   10674             : {
   10675          48 :         if (!strcmp("image", name)) return 0;
   10676           0 :         if (!strcmp("repeatS", name)) return 1;
   10677           0 :         if (!strcmp("repeatT", name)) return 2;
   10678           0 :         return -1;
   10679          16 : }
   10680             : static Bool PixelTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10681             : {
   10682           0 :         switch (FieldIndex) {
   10683             :         case 0:
   10684           0 :                 *AType = 0;
   10685           0 :                 *QType = 0;
   10686           0 :                 return 1;
   10687             :         default:
   10688           0 :                 return 0;
   10689             :         }
   10690           0 : }
   10691             : 
   10692             : 
   10693             : 
   10694             : GF_Node *PixelTexture_Create()
   10695             : {
   10696             :         M_PixelTexture *p;
   10697         216 :         GF_SAFEALLOC(p, M_PixelTexture);
   10698          72 :         if(!p) return NULL;
   10699          72 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PixelTexture);
   10700             : 
   10701             :         /*default field values*/
   10702          72 :         p->repeatS = 1;
   10703          72 :         p->repeatT = 1;
   10704          72 :         return (GF_Node *)p;
   10705          72 : }
   10706             : 
   10707             : 
   10708             : /*
   10709             :         PlaneSensor Node deletion
   10710             : */
   10711             : 
   10712             : static void PlaneSensor_Del(GF_Node *node)
   10713             : {
   10714          36 :         M_PlaneSensor *p = (M_PlaneSensor *) node;
   10715          18 :         gf_node_free((GF_Node *) p);
   10716          18 : }
   10717             : 
   10718             : static const u16 PlaneSensor_Def2All[] = { 0, 1, 2, 3, 4};
   10719             : static const u16 PlaneSensor_In2All[] = { 0, 1, 2, 3, 4};
   10720             : static const u16 PlaneSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   10721             : 
   10722             : static u32 PlaneSensor_get_field_count(GF_Node *node, u8 IndexMode)
   10723             : {
   10724         104 :         switch(IndexMode) {
   10725             :         case GF_SG_FIELD_CODING_IN:
   10726           0 :                 return 5;
   10727             :         case GF_SG_FIELD_CODING_DEF:
   10728           9 :                 return 5;
   10729             :         case GF_SG_FIELD_CODING_OUT:
   10730          36 :                 return 8;
   10731             :         case GF_SG_FIELD_CODING_DYN:
   10732           0 :                 return 0;
   10733             :         default:
   10734           7 :                 return 8;
   10735             :         }
   10736          52 : }
   10737             : 
   10738             : static GF_Err PlaneSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10739             : {
   10740         198 :         switch(IndexMode) {
   10741             :         case GF_SG_FIELD_CODING_IN:
   10742           0 :                 *allField = PlaneSensor_In2All[inField];
   10743           0 :                 return GF_OK;
   10744             :         case GF_SG_FIELD_CODING_DEF:
   10745          25 :                 *allField = PlaneSensor_Def2All[inField];
   10746          25 :                 return GF_OK;
   10747             :         case GF_SG_FIELD_CODING_OUT:
   10748          74 :                 *allField = PlaneSensor_Out2All[inField];
   10749          74 :                 return GF_OK;
   10750             :         default:
   10751           0 :                 return GF_BAD_PARAM;
   10752             :         }
   10753          99 : }
   10754             : static GF_Err PlaneSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   10755             : {
   10756         376 :         switch (info->fieldIndex) {
   10757             :         case 0:
   10758          18 :                 info->name = "autoOffset";
   10759          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10760          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10761          18 :                 info->far_ptr = & ((M_PlaneSensor *) node)->autoOffset;
   10762          18 :                 return GF_OK;
   10763             :         case 1:
   10764          18 :                 info->name = "enabled";
   10765          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10766          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10767          18 :                 info->far_ptr = & ((M_PlaneSensor *) node)->enabled;
   10768          18 :                 return GF_OK;
   10769             :         case 2:
   10770          33 :                 info->name = "maxPosition";
   10771          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10772          33 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10773          33 :                 info->far_ptr = & ((M_PlaneSensor *) node)->maxPosition;
   10774          33 :                 return GF_OK;
   10775             :         case 3:
   10776          33 :                 info->name = "minPosition";
   10777          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10778          33 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10779          33 :                 info->far_ptr = & ((M_PlaneSensor *) node)->minPosition;
   10780          33 :                 return GF_OK;
   10781             :         case 4:
   10782          33 :                 info->name = "offset";
   10783          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10784          33 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   10785          33 :                 info->far_ptr = & ((M_PlaneSensor *) node)->offset;
   10786          33 :                 return GF_OK;
   10787             :         case 5:
   10788          23 :                 info->name = "isActive";
   10789          23 :                 info->eventType = GF_SG_EVENT_OUT;
   10790          23 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10791          23 :                 info->far_ptr = & ((M_PlaneSensor *) node)->isActive;
   10792          23 :                 return GF_OK;
   10793             :         case 6:
   10794          15 :                 info->name = "trackPoint_changed";
   10795          15 :                 info->eventType = GF_SG_EVENT_OUT;
   10796          15 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   10797          15 :                 info->far_ptr = & ((M_PlaneSensor *) node)->trackPoint_changed;
   10798          15 :                 return GF_OK;
   10799             :         case 7:
   10800          15 :                 info->name = "translation_changed";
   10801          15 :                 info->eventType = GF_SG_EVENT_OUT;
   10802          15 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   10803          15 :                 info->far_ptr = & ((M_PlaneSensor *) node)->translation_changed;
   10804          15 :                 return GF_OK;
   10805             :         default:
   10806           0 :                 return GF_BAD_PARAM;
   10807             :         }
   10808         188 : }
   10809             : 
   10810             : 
   10811             : static s32 PlaneSensor_get_field_index_by_name(char *name)
   10812             : {
   10813          56 :         if (!strcmp("autoOffset", name)) return 0;
   10814          28 :         if (!strcmp("enabled", name)) return 1;
   10815          32 :         if (!strcmp("maxPosition", name)) return 2;
   10816          28 :         if (!strcmp("minPosition", name)) return 3;
   10817          24 :         if (!strcmp("offset", name)) return 4;
   10818          24 :         if (!strcmp("isActive", name)) return 5;
   10819          12 :         if (!strcmp("trackPoint_changed", name)) return 6;
   10820           8 :         if (!strcmp("translation_changed", name)) return 7;
   10821           0 :         return -1;
   10822          28 : }
   10823             : static Bool PlaneSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10824             : {
   10825           0 :         switch (FieldIndex) {
   10826             :         case 2:
   10827           0 :                 *AType = 0;
   10828           0 :                 *QType = 2;
   10829           0 :                 *b_min = FIX_MIN;
   10830           0 :                 *b_max = FIX_MAX;
   10831           0 :                 return 1;
   10832             :         case 3:
   10833           0 :                 *AType = 0;
   10834           0 :                 *QType = 2;
   10835           0 :                 *b_min = FIX_MIN;
   10836           0 :                 *b_max = FIX_MAX;
   10837           0 :                 return 1;
   10838             :         case 4:
   10839           0 :                 *AType = 0;
   10840           0 :                 *QType = 1;
   10841           0 :                 *b_min = FIX_MIN;
   10842           0 :                 *b_max = FIX_MAX;
   10843           0 :                 return 1;
   10844             :         default:
   10845           0 :                 return 0;
   10846             :         }
   10847           0 : }
   10848             : 
   10849             : 
   10850             : 
   10851             : GF_Node *PlaneSensor_Create()
   10852             : {
   10853             :         M_PlaneSensor *p;
   10854          54 :         GF_SAFEALLOC(p, M_PlaneSensor);
   10855          18 :         if(!p) return NULL;
   10856          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PlaneSensor);
   10857             : 
   10858             :         /*default field values*/
   10859          18 :         p->autoOffset = 1;
   10860          18 :         p->enabled = 1;
   10861          18 :         p->maxPosition.x = FLT2FIX(-1);
   10862          18 :         p->maxPosition.y = FLT2FIX(-1);
   10863          18 :         p->minPosition.x = FLT2FIX(0);
   10864          18 :         p->minPosition.y = FLT2FIX(0);
   10865          18 :         p->offset.x = FLT2FIX(0);
   10866          18 :         p->offset.y = FLT2FIX(0);
   10867          18 :         p->offset.z = FLT2FIX(0);
   10868          18 :         return (GF_Node *)p;
   10869          18 : }
   10870             : 
   10871             : 
   10872             : /*
   10873             :         PlaneSensor2D Node deletion
   10874             : */
   10875             : 
   10876             : static void PlaneSensor2D_Del(GF_Node *node)
   10877             : {
   10878         558 :         M_PlaneSensor2D *p = (M_PlaneSensor2D *) node;
   10879         279 :         gf_node_free((GF_Node *) p);
   10880         279 : }
   10881             : 
   10882             : static const u16 PlaneSensor2D_Def2All[] = { 0, 1, 2, 3, 4};
   10883             : static const u16 PlaneSensor2D_In2All[] = { 0, 1, 2, 3, 4};
   10884             : static const u16 PlaneSensor2D_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   10885             : 
   10886             : static u32 PlaneSensor2D_get_field_count(GF_Node *node, u8 IndexMode)
   10887             : {
   10888         790 :         switch(IndexMode) {
   10889             :         case GF_SG_FIELD_CODING_IN:
   10890           0 :                 return 5;
   10891             :         case GF_SG_FIELD_CODING_DEF:
   10892         148 :                 return 5;
   10893             :         case GF_SG_FIELD_CODING_OUT:
   10894         139 :                 return 8;
   10895             :         case GF_SG_FIELD_CODING_DYN:
   10896           0 :                 return 0;
   10897             :         default:
   10898         108 :                 return 8;
   10899             :         }
   10900         395 : }
   10901             : 
   10902             : static GF_Err PlaneSensor2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10903             : {
   10904        1332 :         switch(IndexMode) {
   10905             :         case GF_SG_FIELD_CODING_IN:
   10906           0 :                 *allField = PlaneSensor2D_In2All[inField];
   10907           0 :                 return GF_OK;
   10908             :         case GF_SG_FIELD_CODING_DEF:
   10909         335 :                 *allField = PlaneSensor2D_Def2All[inField];
   10910         335 :                 return GF_OK;
   10911             :         case GF_SG_FIELD_CODING_OUT:
   10912         331 :                 *allField = PlaneSensor2D_Out2All[inField];
   10913         331 :                 return GF_OK;
   10914             :         default:
   10915           0 :                 return GF_BAD_PARAM;
   10916             :         }
   10917         666 : }
   10918             : static GF_Err PlaneSensor2D_get_field(GF_Node *node, GF_FieldInfo *info)
   10919             : {
   10920        4720 :         switch (info->fieldIndex) {
   10921             :         case 0:
   10922         299 :                 info->name = "autoOffset";
   10923         299 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10924         299 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10925         299 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->autoOffset;
   10926         299 :                 return GF_OK;
   10927             :         case 1:
   10928         280 :                 info->name = "enabled";
   10929         280 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10930         280 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10931         280 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->enabled;
   10932         280 :                 return GF_OK;
   10933             :         case 2:
   10934         515 :                 info->name = "maxPosition";
   10935         515 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10936         515 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10937         515 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->maxPosition;
   10938         515 :                 return GF_OK;
   10939             :         case 3:
   10940         479 :                 info->name = "minPosition";
   10941         479 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10942         479 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10943         479 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->minPosition;
   10944         479 :                 return GF_OK;
   10945             :         case 4:
   10946         333 :                 info->name = "offset";
   10947         333 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10948         333 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10949         333 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->offset;
   10950         333 :                 return GF_OK;
   10951             :         case 5:
   10952         112 :                 info->name = "isActive";
   10953         112 :                 info->eventType = GF_SG_EVENT_OUT;
   10954         112 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10955         112 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->isActive;
   10956         112 :                 return GF_OK;
   10957             :         case 6:
   10958         112 :                 info->name = "trackPoint_changed";
   10959         112 :                 info->eventType = GF_SG_EVENT_OUT;
   10960         112 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10961         112 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->trackPoint_changed;
   10962         112 :                 return GF_OK;
   10963             :         case 7:
   10964         230 :                 info->name = "translation_changed";
   10965         230 :                 info->eventType = GF_SG_EVENT_OUT;
   10966         230 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10967         230 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->translation_changed;
   10968         230 :                 return GF_OK;
   10969             :         default:
   10970           0 :                 return GF_BAD_PARAM;
   10971             :         }
   10972        2360 : }
   10973             : 
   10974             : 
   10975             : static s32 PlaneSensor2D_get_field_index_by_name(char *name)
   10976             : {
   10977         428 :         if (!strcmp("autoOffset", name)) return 0;
   10978         202 :         if (!strcmp("enabled", name)) return 1;
   10979         268 :         if (!strcmp("maxPosition", name)) return 2;
   10980         190 :         if (!strcmp("minPosition", name)) return 3;
   10981          98 :         if (!strcmp("offset", name)) return 4;
   10982          68 :         if (!strcmp("isActive", name)) return 5;
   10983          66 :         if (!strcmp("trackPoint_changed", name)) return 6;
   10984         124 :         if (!strcmp("translation_changed", name)) return 7;
   10985           0 :         return -1;
   10986         210 : }
   10987             : static Bool PlaneSensor2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10988             : {
   10989           0 :         switch (FieldIndex) {
   10990             :         case 2:
   10991           0 :                 *AType = 0;
   10992           0 :                 *QType = 2;
   10993           0 :                 *b_min = FIX_MIN;
   10994           0 :                 *b_max = FIX_MAX;
   10995           0 :                 return 1;
   10996             :         case 3:
   10997           0 :                 *AType = 0;
   10998           0 :                 *QType = 2;
   10999           0 :                 *b_min = FIX_MIN;
   11000           0 :                 *b_max = FIX_MAX;
   11001           0 :                 return 1;
   11002             :         case 4:
   11003           0 :                 *AType = 0;
   11004           0 :                 *QType = 12;
   11005           0 :                 *b_min = FIX_MIN;
   11006           0 :                 *b_max = FIX_MAX;
   11007           0 :                 return 1;
   11008             :         default:
   11009           0 :                 return 0;
   11010             :         }
   11011           0 : }
   11012             : 
   11013             : 
   11014             : 
   11015             : GF_Node *PlaneSensor2D_Create()
   11016             : {
   11017             :         M_PlaneSensor2D *p;
   11018         837 :         GF_SAFEALLOC(p, M_PlaneSensor2D);
   11019         279 :         if(!p) return NULL;
   11020         279 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PlaneSensor2D);
   11021             : 
   11022             :         /*default field values*/
   11023         279 :         p->autoOffset = 1;
   11024         279 :         p->enabled = 1;
   11025         279 :         p->maxPosition.x = FLT2FIX(0);
   11026         279 :         p->maxPosition.y = FLT2FIX(0);
   11027         279 :         p->minPosition.x = FLT2FIX(0);
   11028         279 :         p->minPosition.y = FLT2FIX(0);
   11029         279 :         p->offset.x = FLT2FIX(0);
   11030         279 :         p->offset.y = FLT2FIX(0);
   11031         279 :         return (GF_Node *)p;
   11032         279 : }
   11033             : 
   11034             : 
   11035             : /*
   11036             :         PointLight Node deletion
   11037             : */
   11038             : 
   11039             : static void PointLight_Del(GF_Node *node)
   11040             : {
   11041          36 :         M_PointLight *p = (M_PointLight *) node;
   11042          18 :         gf_node_free((GF_Node *) p);
   11043          18 : }
   11044             : 
   11045             : static const u16 PointLight_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   11046             : static const u16 PointLight_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   11047             : static const u16 PointLight_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   11048             : static const u16 PointLight_Dyn2All[] = { 0, 1, 2, 3, 4, 6};
   11049             : 
   11050             : static u32 PointLight_get_field_count(GF_Node *node, u8 IndexMode)
   11051             : {
   11052          50 :         switch(IndexMode) {
   11053             :         case GF_SG_FIELD_CODING_IN:
   11054           9 :                 return 7;
   11055             :         case GF_SG_FIELD_CODING_DEF:
   11056           9 :                 return 7;
   11057             :         case GF_SG_FIELD_CODING_OUT:
   11058           0 :                 return 7;
   11059             :         case GF_SG_FIELD_CODING_DYN:
   11060           0 :                 return 6;
   11061             :         default:
   11062           7 :                 return 7;
   11063             :         }
   11064          25 : }
   11065             : 
   11066             : static GF_Err PointLight_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11067             : {
   11068          76 :         switch(IndexMode) {
   11069             :         case GF_SG_FIELD_CODING_IN:
   11070           9 :                 *allField = PointLight_In2All[inField];
   11071           9 :                 return GF_OK;
   11072             :         case GF_SG_FIELD_CODING_DEF:
   11073          29 :                 *allField = PointLight_Def2All[inField];
   11074          29 :                 return GF_OK;
   11075             :         case GF_SG_FIELD_CODING_OUT:
   11076           0 :                 *allField = PointLight_Out2All[inField];
   11077           0 :                 return GF_OK;
   11078             :         case GF_SG_FIELD_CODING_DYN:
   11079           0 :                 *allField = PointLight_Dyn2All[inField];
   11080           0 :                 return GF_OK;
   11081             :         default:
   11082           0 :                 return GF_BAD_PARAM;
   11083             :         }
   11084          38 : }
   11085             : static GF_Err PointLight_get_field(GF_Node *node, GF_FieldInfo *info)
   11086             : {
   11087         358 :         switch (info->fieldIndex) {
   11088             :         case 0:
   11089          18 :                 info->name = "ambientIntensity";
   11090          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11091          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11092          18 :                 info->far_ptr = & ((M_PointLight *) node)->ambientIntensity;
   11093          18 :                 return GF_OK;
   11094             :         case 1:
   11095          41 :                 info->name = "attenuation";
   11096          41 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11097          41 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11098          41 :                 info->far_ptr = & ((M_PointLight *) node)->attenuation;
   11099          41 :                 return GF_OK;
   11100             :         case 2:
   11101          33 :                 info->name = "color";
   11102          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11103          33 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   11104          33 :                 info->far_ptr = & ((M_PointLight *) node)->color;
   11105          33 :                 return GF_OK;
   11106             :         case 3:
   11107          18 :                 info->name = "intensity";
   11108          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11109          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11110          18 :                 info->far_ptr = & ((M_PointLight *) node)->intensity;
   11111          18 :                 return GF_OK;
   11112             :         case 4:
   11113          33 :                 info->name = "location";
   11114          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11115          33 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11116          33 :                 info->far_ptr = & ((M_PointLight *) node)->location;
   11117          33 :                 return GF_OK;
   11118             :         case 5:
   11119          18 :                 info->name = "on";
   11120          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11121          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11122          18 :                 info->far_ptr = & ((M_PointLight *) node)->on;
   11123          18 :                 return GF_OK;
   11124             :         case 6:
   11125          18 :                 info->name = "radius";
   11126          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11127          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11128          18 :                 info->far_ptr = & ((M_PointLight *) node)->radius;
   11129          18 :                 return GF_OK;
   11130             :         default:
   11131           0 :                 return GF_BAD_PARAM;
   11132             :         }
   11133         179 : }
   11134             : 
   11135             : 
   11136             : static s32 PointLight_get_field_index_by_name(char *name)
   11137             : {
   11138          32 :         if (!strcmp("ambientIntensity", name)) return 0;
   11139          24 :         if (!strcmp("attenuation", name)) return 1;
   11140          12 :         if (!strcmp("color", name)) return 2;
   11141           4 :         if (!strcmp("intensity", name)) return 3;
   11142           8 :         if (!strcmp("location", name)) return 4;
   11143           0 :         if (!strcmp("on", name)) return 5;
   11144           0 :         if (!strcmp("radius", name)) return 6;
   11145           0 :         return -1;
   11146          16 : }
   11147             : static Bool PointLight_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11148             : {
   11149           0 :         switch (FieldIndex) {
   11150             :         case 0:
   11151           0 :                 *AType = 8;
   11152           0 :                 *QType = 4;
   11153           0 :                 *b_min = FLT2FIX(0);
   11154           0 :                 *b_max = FLT2FIX(1);
   11155           0 :                 return 1;
   11156             :         case 1:
   11157           0 :                 *AType = 1;
   11158           0 :                 *QType = 11;
   11159           0 :                 *b_min = FLT2FIX(0);
   11160           0 :                 *b_max = FIX_MAX;
   11161           0 :                 return 1;
   11162             :         case 2:
   11163           0 :                 *AType = 4;
   11164           0 :                 *QType = 4;
   11165           0 :                 *b_min = FLT2FIX(0);
   11166           0 :                 *b_max = FLT2FIX(1);
   11167           0 :                 return 1;
   11168             :         case 3:
   11169           0 :                 *AType = 8;
   11170           0 :                 *QType = 4;
   11171           0 :                 *b_min = FLT2FIX(0);
   11172           0 :                 *b_max = FLT2FIX(1);
   11173           0 :                 return 1;
   11174             :         case 4:
   11175           0 :                 *AType = 1;
   11176           0 :                 *QType = 1;
   11177           0 :                 *b_min = FIX_MIN;
   11178           0 :                 *b_max = FIX_MAX;
   11179           0 :                 return 1;
   11180             :         case 6:
   11181           0 :                 *AType = 7;
   11182           0 :                 *QType = 11;
   11183           0 :                 *b_min = FLT2FIX(0);
   11184           0 :                 *b_max = FIX_MAX;
   11185           0 :                 return 1;
   11186             :         default:
   11187           0 :                 return 0;
   11188             :         }
   11189           0 : }
   11190             : 
   11191             : 
   11192             : 
   11193             : GF_Node *PointLight_Create()
   11194             : {
   11195             :         M_PointLight *p;
   11196          54 :         GF_SAFEALLOC(p, M_PointLight);
   11197          18 :         if(!p) return NULL;
   11198          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointLight);
   11199             : 
   11200             :         /*default field values*/
   11201          18 :         p->ambientIntensity = FLT2FIX(0);
   11202          18 :         p->attenuation.x = FLT2FIX(1);
   11203          18 :         p->attenuation.y = FLT2FIX(0);
   11204          18 :         p->attenuation.z = FLT2FIX(0);
   11205          18 :         p->color.red = FLT2FIX(1);
   11206          18 :         p->color.green = FLT2FIX(1);
   11207          18 :         p->color.blue = FLT2FIX(1);
   11208          18 :         p->intensity = FLT2FIX(1);
   11209          18 :         p->location.x = FLT2FIX(0);
   11210          18 :         p->location.y = FLT2FIX(0);
   11211          18 :         p->location.z = FLT2FIX(0);
   11212          18 :         p->on = 1;
   11213          18 :         p->radius = FLT2FIX(100);
   11214          18 :         return (GF_Node *)p;
   11215          18 : }
   11216             : 
   11217             : 
   11218             : /*
   11219             :         PointSet Node deletion
   11220             : */
   11221             : 
   11222             : static void PointSet_Del(GF_Node *node)
   11223             : {
   11224          36 :         M_PointSet *p = (M_PointSet *) node;
   11225          18 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   11226          18 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
   11227          18 :         gf_node_free((GF_Node *) p);
   11228          18 : }
   11229             : 
   11230             : static const u16 PointSet_Def2All[] = { 0, 1};
   11231             : static const u16 PointSet_In2All[] = { 0, 1};
   11232             : static const u16 PointSet_Out2All[] = { 0, 1};
   11233             : 
   11234             : static u32 PointSet_get_field_count(GF_Node *node, u8 IndexMode)
   11235             : {
   11236          32 :         switch(IndexMode) {
   11237             :         case GF_SG_FIELD_CODING_IN:
   11238           0 :                 return 2;
   11239             :         case GF_SG_FIELD_CODING_DEF:
   11240           9 :                 return 2;
   11241             :         case GF_SG_FIELD_CODING_OUT:
   11242           0 :                 return 2;
   11243             :         case GF_SG_FIELD_CODING_DYN:
   11244           0 :                 return 0;
   11245             :         default:
   11246           7 :                 return 2;
   11247             :         }
   11248          16 : }
   11249             : 
   11250             : static GF_Err PointSet_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11251             : {
   11252          18 :         switch(IndexMode) {
   11253             :         case GF_SG_FIELD_CODING_IN:
   11254           0 :                 *allField = PointSet_In2All[inField];
   11255           0 :                 return GF_OK;
   11256             :         case GF_SG_FIELD_CODING_DEF:
   11257           9 :                 *allField = PointSet_Def2All[inField];
   11258           9 :                 return GF_OK;
   11259             :         case GF_SG_FIELD_CODING_OUT:
   11260           0 :                 *allField = PointSet_Out2All[inField];
   11261           0 :                 return GF_OK;
   11262             :         default:
   11263           0 :                 return GF_BAD_PARAM;
   11264             :         }
   11265           9 : }
   11266             : static GF_Err PointSet_get_field(GF_Node *node, GF_FieldInfo *info)
   11267             : {
   11268          66 :         switch (info->fieldIndex) {
   11269             :         case 0:
   11270           9 :                 info->name = "color";
   11271           9 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11272           9 :                 info->fieldType = GF_SG_VRML_SFNODE;
   11273           9 :                 info->NDTtype = NDT_SFColorNode;
   11274           9 :                 info->far_ptr = & ((M_PointSet *)node)->color;
   11275           9 :                 return GF_OK;
   11276             :         case 1:
   11277          24 :                 info->name = "coord";
   11278          24 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11279          24 :                 info->fieldType = GF_SG_VRML_SFNODE;
   11280          24 :                 info->NDTtype = NDT_SFCoordinateNode;
   11281          24 :                 info->far_ptr = & ((M_PointSet *)node)->coord;
   11282          24 :                 return GF_OK;
   11283             :         default:
   11284           0 :                 return GF_BAD_PARAM;
   11285             :         }
   11286          33 : }
   11287             : 
   11288             : 
   11289             : static s32 PointSet_get_field_index_by_name(char *name)
   11290             : {
   11291           8 :         if (!strcmp("color", name)) return 0;
   11292           8 :         if (!strcmp("coord", name)) return 1;
   11293           0 :         return -1;
   11294           4 : }
   11295             : static Bool PointSet_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11296             : {
   11297             :         switch (FieldIndex) {
   11298             :         default:
   11299           0 :                 return 0;
   11300             :         }
   11301             : }
   11302             : 
   11303             : 
   11304             : 
   11305             : GF_Node *PointSet_Create()
   11306             : {
   11307             :         M_PointSet *p;
   11308          54 :         GF_SAFEALLOC(p, M_PointSet);
   11309          18 :         if(!p) return NULL;
   11310          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointSet);
   11311             : 
   11312             :         /*default field values*/
   11313          18 :         return (GF_Node *)p;
   11314          18 : }
   11315             : 
   11316             : 
   11317             : /*
   11318             :         PointSet2D Node deletion
   11319             : */
   11320             : 
   11321             : static void PointSet2D_Del(GF_Node *node)
   11322             : {
   11323         184 :         M_PointSet2D *p = (M_PointSet2D *) node;
   11324          92 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   11325          92 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
   11326          92 :         gf_node_free((GF_Node *) p);
   11327          92 : }
   11328             : 
   11329             : static const u16 PointSet2D_Def2All[] = { 0, 1};
   11330             : static const u16 PointSet2D_In2All[] = { 0, 1};
   11331             : static const u16 PointSet2D_Out2All[] = { 0, 1};
   11332             : 
   11333             : static u32 PointSet2D_get_field_count(GF_Node *node, u8 IndexMode)
   11334             : {
   11335         164 :         switch(IndexMode) {
   11336             :         case GF_SG_FIELD_CODING_IN:
   11337           0 :                 return 2;
   11338             :         case GF_SG_FIELD_CODING_DEF:
   11339          47 :                 return 2;
   11340             :         case GF_SG_FIELD_CODING_OUT:
   11341           0 :                 return 2;
   11342             :         case GF_SG_FIELD_CODING_DYN:
   11343           0 :                 return 0;
   11344             :         default:
   11345          35 :                 return 2;
   11346             :         }
   11347          82 : }
   11348             : 
   11349             : static GF_Err PointSet2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11350             : {
   11351          94 :         switch(IndexMode) {
   11352             :         case GF_SG_FIELD_CODING_IN:
   11353           0 :                 *allField = PointSet2D_In2All[inField];
   11354           0 :                 return GF_OK;
   11355             :         case GF_SG_FIELD_CODING_DEF:
   11356          47 :                 *allField = PointSet2D_Def2All[inField];
   11357          47 :                 return GF_OK;
   11358             :         case GF_SG_FIELD_CODING_OUT:
   11359           0 :                 *allField = PointSet2D_Out2All[inField];
   11360           0 :                 return GF_OK;
   11361             :         default:
   11362           0 :                 return GF_BAD_PARAM;
   11363             :         }
   11364          47 : }
   11365             : static GF_Err PointSet2D_get_field(GF_Node *node, GF_FieldInfo *info)
   11366             : {
   11367         338 :         switch (info->fieldIndex) {
   11368             :         case 0:
   11369          46 :                 info->name = "color";
   11370          46 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11371          46 :                 info->fieldType = GF_SG_VRML_SFNODE;
   11372          46 :                 info->NDTtype = NDT_SFColorNode;
   11373          46 :                 info->far_ptr = & ((M_PointSet2D *)node)->color;
   11374          46 :                 return GF_OK;
   11375             :         case 1:
   11376         123 :                 info->name = "coord";
   11377         123 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11378         123 :                 info->fieldType = GF_SG_VRML_SFNODE;
   11379         123 :                 info->NDTtype = NDT_SFCoordinate2DNode;
   11380         123 :                 info->far_ptr = & ((M_PointSet2D *)node)->coord;
   11381         123 :                 return GF_OK;
   11382             :         default:
   11383           0 :                 return GF_BAD_PARAM;
   11384             :         }
   11385         169 : }
   11386             : 
   11387             : 
   11388             : static s32 PointSet2D_get_field_index_by_name(char *name)
   11389             : {
   11390          42 :         if (!strcmp("color", name)) return 0;
   11391          42 :         if (!strcmp("coord", name)) return 1;
   11392           0 :         return -1;
   11393          21 : }
   11394             : static Bool PointSet2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11395             : {
   11396             :         switch (FieldIndex) {
   11397             :         default:
   11398           0 :                 return 0;
   11399             :         }
   11400             : }
   11401             : 
   11402             : 
   11403             : 
   11404             : GF_Node *PointSet2D_Create()
   11405             : {
   11406             :         M_PointSet2D *p;
   11407         276 :         GF_SAFEALLOC(p, M_PointSet2D);
   11408          92 :         if(!p) return NULL;
   11409          92 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointSet2D);
   11410             : 
   11411             :         /*default field values*/
   11412          92 :         return (GF_Node *)p;
   11413          92 : }
   11414             : 
   11415             : 
   11416             : /*
   11417             :         PositionInterpolator Node deletion
   11418             : */
   11419             : 
   11420             : static void PositionInterpolator_Del(GF_Node *node)
   11421             : {
   11422         396 :         M_PositionInterpolator *p = (M_PositionInterpolator *) node;
   11423         198 :         gf_sg_mffloat_del(p->key);
   11424         198 :         gf_sg_mfvec3f_del(p->keyValue);
   11425         198 :         gf_node_free((GF_Node *) p);
   11426         198 : }
   11427             : 
   11428             : static const u16 PositionInterpolator_Def2All[] = { 1, 2};
   11429             : static const u16 PositionInterpolator_In2All[] = { 0, 1, 2};
   11430             : static const u16 PositionInterpolator_Out2All[] = { 1, 2, 3};
   11431             : 
   11432             : static u32 PositionInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
   11433             : {
   11434         748 :         switch(IndexMode) {
   11435             :         case GF_SG_FIELD_CODING_IN:
   11436          99 :                 return 3;
   11437             :         case GF_SG_FIELD_CODING_DEF:
   11438          99 :                 return 2;
   11439             :         case GF_SG_FIELD_CODING_OUT:
   11440          99 :                 return 3;
   11441             :         case GF_SG_FIELD_CODING_DYN:
   11442           0 :                 return 0;
   11443             :         default:
   11444          77 :                 return 4;
   11445             :         }
   11446         374 : }
   11447             : 
   11448             : static GF_Err PositionInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11449             : {
   11450         704 :         switch(IndexMode) {
   11451             :         case GF_SG_FIELD_CODING_IN:
   11452          77 :                 *allField = PositionInterpolator_In2All[inField];
   11453          77 :                 return GF_OK;
   11454             :         case GF_SG_FIELD_CODING_DEF:
   11455         154 :                 *allField = PositionInterpolator_Def2All[inField];
   11456         154 :                 return GF_OK;
   11457             :         case GF_SG_FIELD_CODING_OUT:
   11458         121 :                 *allField = PositionInterpolator_Out2All[inField];
   11459         121 :                 return GF_OK;
   11460             :         default:
   11461           0 :                 return GF_BAD_PARAM;
   11462             :         }
   11463         352 : }
   11464             : static GF_Err PositionInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
   11465             : {
   11466        2112 :         switch (info->fieldIndex) {
   11467             :         case 0:
   11468         165 :                 info->name = "set_fraction";
   11469         165 :                 info->eventType = GF_SG_EVENT_IN;
   11470         165 :                 info->on_event_in = ((M_PositionInterpolator *)node)->on_set_fraction;
   11471         165 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11472         165 :                 info->far_ptr = & ((M_PositionInterpolator *) node)->set_fraction;
   11473         165 :                 return GF_OK;
   11474             :         case 1:
   11475         363 :                 info->name = "key";
   11476         363 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11477         363 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   11478         363 :                 info->far_ptr = & ((M_PositionInterpolator *) node)->key;
   11479         363 :                 return GF_OK;
   11480             :         case 2:
   11481         363 :                 info->name = "keyValue";
   11482         363 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11483         363 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   11484         363 :                 info->far_ptr = & ((M_PositionInterpolator *) node)->keyValue;
   11485         363 :                 return GF_OK;
   11486             :         case 3:
   11487         165 :                 info->name = "value_changed";
   11488         165 :                 info->eventType = GF_SG_EVENT_OUT;
   11489         165 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11490         165 :                 info->far_ptr = & ((M_PositionInterpolator *) node)->value_changed;
   11491         165 :                 return GF_OK;
   11492             :         default:
   11493           0 :                 return GF_BAD_PARAM;
   11494             :         }
   11495        1056 : }
   11496             : 
   11497             : 
   11498             : static s32 PositionInterpolator_get_field_index_by_name(char *name)
   11499             : {
   11500         396 :         if (!strcmp("set_fraction", name)) return 0;
   11501         176 :         if (!strcmp("key", name)) return 1;
   11502         132 :         if (!strcmp("keyValue", name)) return 2;
   11503          88 :         if (!strcmp("value_changed", name)) return 3;
   11504           0 :         return -1;
   11505         176 : }
   11506             : static Bool PositionInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11507             : {
   11508           0 :         switch (FieldIndex) {
   11509             :         case 1:
   11510           0 :                 *AType = 0;
   11511           0 :                 *QType = 8;
   11512           0 :                 *b_min = FLT2FIX(0);
   11513           0 :                 *b_max = FLT2FIX(1);
   11514           0 :                 return 1;
   11515             :         case 2:
   11516           0 :                 *AType = 0;
   11517           0 :                 *QType = 1;
   11518           0 :                 *b_min = FIX_MIN;
   11519           0 :                 *b_max = FIX_MAX;
   11520           0 :                 return 1;
   11521             :         default:
   11522           0 :                 return 0;
   11523             :         }
   11524           0 : }
   11525             : 
   11526             : 
   11527             : 
   11528             : GF_Node *PositionInterpolator_Create()
   11529             : {
   11530             :         M_PositionInterpolator *p;
   11531         594 :         GF_SAFEALLOC(p, M_PositionInterpolator);
   11532         198 :         if(!p) return NULL;
   11533         198 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionInterpolator);
   11534             : 
   11535             :         /*default field values*/
   11536         198 :         return (GF_Node *)p;
   11537         198 : }
   11538             : 
   11539             : 
   11540             : /*
   11541             :         PositionInterpolator2D Node deletion
   11542             : */
   11543             : 
   11544             : static void PositionInterpolator2D_Del(GF_Node *node)
   11545             : {
   11546        1220 :         M_PositionInterpolator2D *p = (M_PositionInterpolator2D *) node;
   11547         610 :         gf_sg_mffloat_del(p->key);
   11548         610 :         gf_sg_mfvec2f_del(p->keyValue);
   11549         610 :         gf_node_free((GF_Node *) p);
   11550         610 : }
   11551             : 
   11552             : static const u16 PositionInterpolator2D_Def2All[] = { 1, 2};
   11553             : static const u16 PositionInterpolator2D_In2All[] = { 0, 1, 2};
   11554             : static const u16 PositionInterpolator2D_Out2All[] = { 1, 2, 3};
   11555             : 
   11556             : static u32 PositionInterpolator2D_get_field_count(GF_Node *node, u8 IndexMode)
   11557             : {
   11558        2258 :         switch(IndexMode) {
   11559             :         case GF_SG_FIELD_CODING_IN:
   11560         288 :                 return 3;
   11561             :         case GF_SG_FIELD_CODING_DEF:
   11562         299 :                 return 2;
   11563             :         case GF_SG_FIELD_CODING_OUT:
   11564         297 :                 return 3;
   11565             :         case GF_SG_FIELD_CODING_DYN:
   11566           0 :                 return 0;
   11567             :         default:
   11568         245 :                 return 4;
   11569             :         }
   11570        1129 : }
   11571             : 
   11572             : static GF_Err PositionInterpolator2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11573             : {
   11574        2098 :         switch(IndexMode) {
   11575             :         case GF_SG_FIELD_CODING_IN:
   11576         224 :                 *allField = PositionInterpolator2D_In2All[inField];
   11577         224 :                 return GF_OK;
   11578             :         case GF_SG_FIELD_CODING_DEF:
   11579         462 :                 *allField = PositionInterpolator2D_Def2All[inField];
   11580         462 :                 return GF_OK;
   11581             :         case GF_SG_FIELD_CODING_OUT:
   11582         363 :                 *allField = PositionInterpolator2D_Out2All[inField];
   11583         363 :                 return GF_OK;
   11584             :         default:
   11585           0 :                 return GF_BAD_PARAM;
   11586             :         }
   11587        1049 : }
   11588             : static GF_Err PositionInterpolator2D_get_field(GF_Node *node, GF_FieldInfo *info)
   11589             : {
   11590        6464 :         switch (info->fieldIndex) {
   11591             :         case 0:
   11592         494 :                 info->name = "set_fraction";
   11593         494 :                 info->eventType = GF_SG_EVENT_IN;
   11594         494 :                 info->on_event_in = ((M_PositionInterpolator2D *)node)->on_set_fraction;
   11595         494 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11596         494 :                 info->far_ptr = & ((M_PositionInterpolator2D *) node)->set_fraction;
   11597         494 :                 return GF_OK;
   11598             :         case 1:
   11599        1118 :                 info->name = "key";
   11600        1118 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11601        1118 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   11602        1118 :                 info->far_ptr = & ((M_PositionInterpolator2D *) node)->key;
   11603        1118 :                 return GF_OK;
   11604             :         case 2:
   11605        1118 :                 info->name = "keyValue";
   11606        1118 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11607        1118 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   11608        1118 :                 info->far_ptr = & ((M_PositionInterpolator2D *) node)->keyValue;
   11609        1118 :                 return GF_OK;
   11610             :         case 3:
   11611         502 :                 info->name = "value_changed";
   11612         502 :                 info->eventType = GF_SG_EVENT_OUT;
   11613         502 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   11614         502 :                 info->far_ptr = & ((M_PositionInterpolator2D *) node)->value_changed;
   11615         502 :                 return GF_OK;
   11616             :         default:
   11617           0 :                 return GF_BAD_PARAM;
   11618             :         }
   11619        3232 : }
   11620             : 
   11621             : 
   11622             : static s32 PositionInterpolator2D_get_field_index_by_name(char *name)
   11623             : {
   11624        1192 :         if (!strcmp("set_fraction", name)) return 0;
   11625         540 :         if (!strcmp("key", name)) return 1;
   11626         404 :         if (!strcmp("keyValue", name)) return 2;
   11627         264 :         if (!strcmp("value_changed", name)) return 3;
   11628           0 :         return -1;
   11629         532 : }
   11630             : static Bool PositionInterpolator2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11631             : {
   11632           0 :         switch (FieldIndex) {
   11633             :         case 1:
   11634           0 :                 *AType = 0;
   11635           0 :                 *QType = 8;
   11636           0 :                 *b_min = FLT2FIX(0);
   11637           0 :                 *b_max = FLT2FIX(1);
   11638           0 :                 return 1;
   11639             :         case 2:
   11640           0 :                 *AType = 0;
   11641           0 :                 *QType = 2;
   11642           0 :                 *b_min = FIX_MIN;
   11643           0 :                 *b_max = FIX_MAX;
   11644           0 :                 return 1;
   11645             :         default:
   11646           0 :                 return 0;
   11647             :         }
   11648           0 : }
   11649             : 
   11650             : 
   11651             : 
   11652             : GF_Node *PositionInterpolator2D_Create()
   11653             : {
   11654             :         M_PositionInterpolator2D *p;
   11655        1830 :         GF_SAFEALLOC(p, M_PositionInterpolator2D);
   11656         610 :         if(!p) return NULL;
   11657         610 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionInterpolator2D);
   11658             : 
   11659             :         /*default field values*/
   11660         610 :         return (GF_Node *)p;
   11661         610 : }
   11662             : 
   11663             : 
   11664             : /*
   11665             :         ProximitySensor2D Node deletion
   11666             : */
   11667             : 
   11668             : static void ProximitySensor2D_Del(GF_Node *node)
   11669             : {
   11670          72 :         M_ProximitySensor2D *p = (M_ProximitySensor2D *) node;
   11671          36 :         gf_node_free((GF_Node *) p);
   11672          36 : }
   11673             : 
   11674             : static const u16 ProximitySensor2D_Def2All[] = { 0, 1, 2};
   11675             : static const u16 ProximitySensor2D_In2All[] = { 0, 1, 2};
   11676             : static const u16 ProximitySensor2D_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   11677             : 
   11678             : static u32 ProximitySensor2D_get_field_count(GF_Node *node, u8 IndexMode)
   11679             : {
   11680         136 :         switch(IndexMode) {
   11681             :         case GF_SG_FIELD_CODING_IN:
   11682           0 :                 return 3;
   11683             :         case GF_SG_FIELD_CODING_DEF:
   11684          18 :                 return 3;
   11685             :         case GF_SG_FIELD_CODING_OUT:
   11686          36 :                 return 8;
   11687             :         case GF_SG_FIELD_CODING_DYN:
   11688           0 :                 return 0;
   11689             :         default:
   11690          14 :                 return 8;
   11691             :         }
   11692          68 : }
   11693             : 
   11694             : static GF_Err ProximitySensor2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11695             : {
   11696         148 :         switch(IndexMode) {
   11697             :         case GF_SG_FIELD_CODING_IN:
   11698           0 :                 *allField = ProximitySensor2D_In2All[inField];
   11699           0 :                 return GF_OK;
   11700             :         case GF_SG_FIELD_CODING_DEF:
   11701          22 :                 *allField = ProximitySensor2D_Def2All[inField];
   11702          22 :                 return GF_OK;
   11703             :         case GF_SG_FIELD_CODING_OUT:
   11704          52 :                 *allField = ProximitySensor2D_Out2All[inField];
   11705          52 :                 return GF_OK;
   11706             :         default:
   11707           0 :                 return GF_BAD_PARAM;
   11708             :         }
   11709          74 : }
   11710             : static GF_Err ProximitySensor2D_get_field(GF_Node *node, GF_FieldInfo *info)
   11711             : {
   11712         480 :         switch (info->fieldIndex) {
   11713             :         case 0:
   11714          36 :                 info->name = "center";
   11715          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11716          36 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   11717          36 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->center;
   11718          36 :                 return GF_OK;
   11719             :         case 1:
   11720          66 :                 info->name = "size";
   11721          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11722          66 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   11723          66 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->size;
   11724          66 :                 return GF_OK;
   11725             :         case 2:
   11726          36 :                 info->name = "enabled";
   11727          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11728          36 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11729          36 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->enabled;
   11730          36 :                 return GF_OK;
   11731             :         case 3:
   11732          46 :                 info->name = "isActive";
   11733          46 :                 info->eventType = GF_SG_EVENT_OUT;
   11734          46 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11735          46 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->isActive;
   11736          46 :                 return GF_OK;
   11737             :         case 4:
   11738          14 :                 info->name = "position_changed";
   11739          14 :                 info->eventType = GF_SG_EVENT_OUT;
   11740          14 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   11741          14 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->position_changed;
   11742          14 :                 return GF_OK;
   11743             :         case 5:
   11744          14 :                 info->name = "orientation_changed";
   11745          14 :                 info->eventType = GF_SG_EVENT_OUT;
   11746          14 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11747          14 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->orientation_changed;
   11748          14 :                 return GF_OK;
   11749             :         case 6:
   11750          14 :                 info->name = "enterTime";
   11751          14 :                 info->eventType = GF_SG_EVENT_OUT;
   11752          14 :                 info->fieldType = GF_SG_VRML_SFTIME;
   11753          14 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->enterTime;
   11754          14 :                 return GF_OK;
   11755             :         case 7:
   11756          14 :                 info->name = "exitTime";
   11757          14 :                 info->eventType = GF_SG_EVENT_OUT;
   11758          14 :                 info->fieldType = GF_SG_VRML_SFTIME;
   11759          14 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->exitTime;
   11760          14 :                 return GF_OK;
   11761             :         default:
   11762           0 :                 return GF_BAD_PARAM;
   11763             :         }
   11764         240 : }
   11765             : 
   11766             : 
   11767             : static s32 ProximitySensor2D_get_field_index_by_name(char *name)
   11768             : {
   11769          48 :         if (!strcmp("center", name)) return 0;
   11770          32 :         if (!strcmp("size", name)) return 1;
   11771          16 :         if (!strcmp("enabled", name)) return 2;
   11772          32 :         if (!strcmp("isActive", name)) return 3;
   11773           0 :         if (!strcmp("position_changed", name)) return 4;
   11774           0 :         if (!strcmp("orientation_changed", name)) return 5;
   11775           0 :         if (!strcmp("enterTime", name)) return 6;
   11776           0 :         if (!strcmp("exitTime", name)) return 7;
   11777           0 :         return -1;
   11778          24 : }
   11779             : static Bool ProximitySensor2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11780             : {
   11781           0 :         switch (FieldIndex) {
   11782             :         case 0:
   11783           0 :                 *AType = 0;
   11784           0 :                 *QType = 2;
   11785           0 :                 *b_min = FLT2FIX(-1);
   11786           0 :                 *b_max = FIX_MAX;
   11787           0 :                 return 1;
   11788             :         case 1:
   11789           0 :                 *AType = 0;
   11790           0 :                 *QType = 12;
   11791           0 :                 *b_min = FLT2FIX(0);
   11792           0 :                 *b_max = FIX_MAX;
   11793           0 :                 return 1;
   11794             :         default:
   11795           0 :                 return 0;
   11796             :         }
   11797           0 : }
   11798             : 
   11799             : 
   11800             : 
   11801             : GF_Node *ProximitySensor2D_Create()
   11802             : {
   11803             :         M_ProximitySensor2D *p;
   11804         108 :         GF_SAFEALLOC(p, M_ProximitySensor2D);
   11805          36 :         if(!p) return NULL;
   11806          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ProximitySensor2D);
   11807             : 
   11808             :         /*default field values*/
   11809          36 :         p->center.x = FLT2FIX(0);
   11810          36 :         p->center.y = FLT2FIX(0);
   11811          36 :         p->size.x = FLT2FIX(0);
   11812          36 :         p->size.y = FLT2FIX(0);
   11813          36 :         p->enabled = 1;
   11814          36 :         return (GF_Node *)p;
   11815          36 : }
   11816             : 
   11817             : 
   11818             : /*
   11819             :         ProximitySensor Node deletion
   11820             : */
   11821             : 
   11822             : static void ProximitySensor_Del(GF_Node *node)
   11823             : {
   11824          36 :         M_ProximitySensor *p = (M_ProximitySensor *) node;
   11825          18 :         gf_node_free((GF_Node *) p);
   11826          18 : }
   11827             : 
   11828             : static const u16 ProximitySensor_Def2All[] = { 0, 1, 2};
   11829             : static const u16 ProximitySensor_In2All[] = { 0, 1, 2};
   11830             : static const u16 ProximitySensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   11831             : 
   11832             : static u32 ProximitySensor_get_field_count(GF_Node *node, u8 IndexMode)
   11833             : {
   11834          68 :         switch(IndexMode) {
   11835             :         case GF_SG_FIELD_CODING_IN:
   11836           0 :                 return 3;
   11837             :         case GF_SG_FIELD_CODING_DEF:
   11838           9 :                 return 3;
   11839             :         case GF_SG_FIELD_CODING_OUT:
   11840          18 :                 return 8;
   11841             :         case GF_SG_FIELD_CODING_DYN:
   11842           0 :                 return 0;
   11843             :         default:
   11844           7 :                 return 8;
   11845             :         }
   11846          34 : }
   11847             : 
   11848             : static GF_Err ProximitySensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11849             : {
   11850         102 :         switch(IndexMode) {
   11851             :         case GF_SG_FIELD_CODING_IN:
   11852           0 :                 *allField = ProximitySensor_In2All[inField];
   11853           0 :                 return GF_OK;
   11854             :         case GF_SG_FIELD_CODING_DEF:
   11855          11 :                 *allField = ProximitySensor_Def2All[inField];
   11856          11 :                 return GF_OK;
   11857             :         case GF_SG_FIELD_CODING_OUT:
   11858          40 :                 *allField = ProximitySensor_Out2All[inField];
   11859          40 :                 return GF_OK;
   11860             :         default:
   11861           0 :                 return GF_BAD_PARAM;
   11862             :         }
   11863          51 : }
   11864             : static GF_Err ProximitySensor_get_field(GF_Node *node, GF_FieldInfo *info)
   11865             : {
   11866         244 :         switch (info->fieldIndex) {
   11867             :         case 0:
   11868          20 :                 info->name = "center";
   11869          20 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11870          20 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11871          20 :                 info->far_ptr = & ((M_ProximitySensor *) node)->center;
   11872          20 :                 return GF_OK;
   11873             :         case 1:
   11874          33 :                 info->name = "size";
   11875          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11876          33 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11877          33 :                 info->far_ptr = & ((M_ProximitySensor *) node)->size;
   11878          33 :                 return GF_OK;
   11879             :         case 2:
   11880          18 :                 info->name = "enabled";
   11881          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11882          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11883          18 :                 info->far_ptr = & ((M_ProximitySensor *) node)->enabled;
   11884          18 :                 return GF_OK;
   11885             :         case 3:
   11886           7 :                 info->name = "isActive";
   11887           7 :                 info->eventType = GF_SG_EVENT_OUT;
   11888           7 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11889           7 :                 info->far_ptr = & ((M_ProximitySensor *) node)->isActive;
   11890           7 :                 return GF_OK;
   11891             :         case 4:
   11892           7 :                 info->name = "position_changed";
   11893           7 :                 info->eventType = GF_SG_EVENT_OUT;
   11894           7 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11895           7 :                 info->far_ptr = & ((M_ProximitySensor *) node)->position_changed;
   11896           7 :                 return GF_OK;
   11897             :         case 5:
   11898           7 :                 info->name = "orientation_changed";
   11899           7 :                 info->eventType = GF_SG_EVENT_OUT;
   11900           7 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   11901           7 :                 info->far_ptr = & ((M_ProximitySensor *) node)->orientation_changed;
   11902           7 :                 return GF_OK;
   11903             :         case 6:
   11904          15 :                 info->name = "enterTime";
   11905          15 :                 info->eventType = GF_SG_EVENT_OUT;
   11906          15 :                 info->fieldType = GF_SG_VRML_SFTIME;
   11907          15 :                 info->far_ptr = & ((M_ProximitySensor *) node)->enterTime;
   11908          15 :                 return GF_OK;
   11909             :         case 7:
   11910          15 :                 info->name = "exitTime";
   11911          15 :                 info->eventType = GF_SG_EVENT_OUT;
   11912          15 :                 info->fieldType = GF_SG_VRML_SFTIME;
   11913          15 :                 info->far_ptr = & ((M_ProximitySensor *) node)->exitTime;
   11914          15 :                 return GF_OK;
   11915             :         default:
   11916           0 :                 return GF_BAD_PARAM;
   11917             :         }
   11918         122 : }
   11919             : 
   11920             : 
   11921             : static s32 ProximitySensor_get_field_index_by_name(char *name)
   11922             : {
   11923          30 :         if (!strcmp("center", name)) return 0;
   11924          16 :         if (!strcmp("size", name)) return 1;
   11925           8 :         if (!strcmp("enabled", name)) return 2;
   11926           8 :         if (!strcmp("isActive", name)) return 3;
   11927           8 :         if (!strcmp("position_changed", name)) return 4;
   11928           8 :         if (!strcmp("orientation_changed", name)) return 5;
   11929          12 :         if (!strcmp("enterTime", name)) return 6;
   11930           8 :         if (!strcmp("exitTime", name)) return 7;
   11931           0 :         return -1;
   11932          14 : }
   11933             : static Bool ProximitySensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11934             : {
   11935           0 :         switch (FieldIndex) {
   11936             :         case 0:
   11937           0 :                 *AType = 0;
   11938           0 :                 *QType = 1;
   11939           0 :                 *b_min = FIX_MIN;
   11940           0 :                 *b_max = FIX_MAX;
   11941           0 :                 return 1;
   11942             :         case 1:
   11943           0 :                 *AType = 0;
   11944           0 :                 *QType = 11;
   11945           0 :                 *b_min = FLT2FIX(0);
   11946           0 :                 *b_max = FIX_MAX;
   11947           0 :                 return 1;
   11948             :         default:
   11949           0 :                 return 0;
   11950             :         }
   11951           0 : }
   11952             : 
   11953             : 
   11954             : 
   11955             : GF_Node *ProximitySensor_Create()
   11956             : {
   11957             :         M_ProximitySensor *p;
   11958          54 :         GF_SAFEALLOC(p, M_ProximitySensor);
   11959          18 :         if(!p) return NULL;
   11960          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ProximitySensor);
   11961             : 
   11962             :         /*default field values*/
   11963          18 :         p->center.x = FLT2FIX(0);
   11964          18 :         p->center.y = FLT2FIX(0);
   11965          18 :         p->center.z = FLT2FIX(0);
   11966          18 :         p->size.x = FLT2FIX(0);
   11967          18 :         p->size.y = FLT2FIX(0);
   11968          18 :         p->size.z = FLT2FIX(0);
   11969          18 :         p->enabled = 1;
   11970          18 :         return (GF_Node *)p;
   11971          18 : }
   11972             : 
   11973             : 
   11974             : /*
   11975             :         QuantizationParameter Node deletion
   11976             : */
   11977             : 
   11978             : static void QuantizationParameter_Del(GF_Node *node)
   11979             : {
   11980         246 :         M_QuantizationParameter *p = (M_QuantizationParameter *) node;
   11981         123 :         gf_node_free((GF_Node *) p);
   11982         123 : }
   11983             : 
   11984             : static const u16 QuantizationParameter_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39};
   11985             : 
   11986             : static u32 QuantizationParameter_get_field_count(GF_Node *node, u8 IndexMode)
   11987             : {
   11988         218 :         switch(IndexMode) {
   11989             :         case GF_SG_FIELD_CODING_IN:
   11990           0 :                 return 0;
   11991             :         case GF_SG_FIELD_CODING_DEF:
   11992          63 :                 return 40;
   11993             :         case GF_SG_FIELD_CODING_OUT:
   11994           0 :                 return 0;
   11995             :         case GF_SG_FIELD_CODING_DYN:
   11996           0 :                 return 0;
   11997             :         default:
   11998          46 :                 return 40;
   11999             :         }
   12000         109 : }
   12001             : 
   12002             : static GF_Err QuantizationParameter_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12003             : {
   12004        1460 :         switch(IndexMode) {
   12005             :         case GF_SG_FIELD_CODING_DEF:
   12006         730 :                 *allField = QuantizationParameter_Def2All[inField];
   12007         730 :                 return GF_OK;
   12008             :         default:
   12009           0 :                 return GF_BAD_PARAM;
   12010             :         }
   12011         730 : }
   12012             : static GF_Err QuantizationParameter_get_field(GF_Node *node, GF_FieldInfo *info)
   12013             : {
   12014       10620 :         switch (info->fieldIndex) {
   12015             :         case 0:
   12016         120 :                 info->name = "isLocal";
   12017         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12018         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12019         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->isLocal;
   12020         120 :                 return GF_OK;
   12021             :         case 1:
   12022         120 :                 info->name = "position3DQuant";
   12023         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12024         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12025         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position3DQuant;
   12026         120 :                 return GF_OK;
   12027             :         case 2:
   12028         120 :                 info->name = "position3DMin";
   12029         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12030         120 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   12031         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position3DMin;
   12032         120 :                 return GF_OK;
   12033             :         case 3:
   12034         120 :                 info->name = "position3DMax";
   12035         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12036         120 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   12037         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position3DMax;
   12038         120 :                 return GF_OK;
   12039             :         case 4:
   12040         120 :                 info->name = "position3DNbBits";
   12041         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12042         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12043         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position3DNbBits;
   12044         120 :                 return GF_OK;
   12045             :         case 5:
   12046         225 :                 info->name = "position2DQuant";
   12047         225 :                 info->eventType = GF_SG_EVENT_FIELD;
   12048         225 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12049         225 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position2DQuant;
   12050         225 :                 return GF_OK;
   12051             :         case 6:
   12052         225 :                 info->name = "position2DMin";
   12053         225 :                 info->eventType = GF_SG_EVENT_FIELD;
   12054         225 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   12055         225 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position2DMin;
   12056         225 :                 return GF_OK;
   12057             :         case 7:
   12058         225 :                 info->name = "position2DMax";
   12059         225 :                 info->eventType = GF_SG_EVENT_FIELD;
   12060         225 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   12061         225 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position2DMax;
   12062         225 :                 return GF_OK;
   12063             :         case 8:
   12064         225 :                 info->name = "position2DNbBits";
   12065         225 :                 info->eventType = GF_SG_EVENT_FIELD;
   12066         225 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12067         225 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position2DNbBits;
   12068         225 :                 return GF_OK;
   12069             :         case 9:
   12070         120 :                 info->name = "drawOrderQuant";
   12071         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12072         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12073         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->drawOrderQuant;
   12074         120 :                 return GF_OK;
   12075             :         case 10:
   12076         120 :                 info->name = "drawOrderMin";
   12077         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12078         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12079         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->drawOrderMin;
   12080         120 :                 return GF_OK;
   12081             :         case 11:
   12082         120 :                 info->name = "drawOrderMax";
   12083         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12084         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12085         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->drawOrderMax;
   12086         120 :                 return GF_OK;
   12087             :         case 12:
   12088         120 :                 info->name = "drawOrderNbBits";
   12089         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12090         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12091         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->drawOrderNbBits;
   12092         120 :                 return GF_OK;
   12093             :         case 13:
   12094         210 :                 info->name = "colorQuant";
   12095         210 :                 info->eventType = GF_SG_EVENT_FIELD;
   12096         210 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12097         210 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->colorQuant;
   12098         210 :                 return GF_OK;
   12099             :         case 14:
   12100         120 :                 info->name = "colorMin";
   12101         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12102         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12103         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->colorMin;
   12104         120 :                 return GF_OK;
   12105             :         case 15:
   12106         120 :                 info->name = "colorMax";
   12107         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12108         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12109         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->colorMax;
   12110         120 :                 return GF_OK;
   12111             :         case 16:
   12112         120 :                 info->name = "colorNbBits";
   12113         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12114         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12115         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->colorNbBits;
   12116         120 :                 return GF_OK;
   12117             :         case 17:
   12118         120 :                 info->name = "textureCoordinateQuant";
   12119         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12120         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12121         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->textureCoordinateQuant;
   12122         120 :                 return GF_OK;
   12123             :         case 18:
   12124         120 :                 info->name = "textureCoordinateMin";
   12125         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12126         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12127         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->textureCoordinateMin;
   12128         120 :                 return GF_OK;
   12129             :         case 19:
   12130         120 :                 info->name = "textureCoordinateMax";
   12131         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12132         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12133         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->textureCoordinateMax;
   12134         120 :                 return GF_OK;
   12135             :         case 20:
   12136         120 :                 info->name = "textureCoordinateNbBits";
   12137         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12138         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12139         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->textureCoordinateNbBits;
   12140         120 :                 return GF_OK;
   12141             :         case 21:
   12142         120 :                 info->name = "angleQuant";
   12143         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12144         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12145         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->angleQuant;
   12146         120 :                 return GF_OK;
   12147             :         case 22:
   12148         120 :                 info->name = "angleMin";
   12149         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12150         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12151         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->angleMin;
   12152         120 :                 return GF_OK;
   12153             :         case 23:
   12154         120 :                 info->name = "angleMax";
   12155         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12156         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12157         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->angleMax;
   12158         120 :                 return GF_OK;
   12159             :         case 24:
   12160         120 :                 info->name = "angleNbBits";
   12161         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12162         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12163         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->angleNbBits;
   12164         120 :                 return GF_OK;
   12165             :         case 25:
   12166         120 :                 info->name = "scaleQuant";
   12167         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12168         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12169         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->scaleQuant;
   12170         120 :                 return GF_OK;
   12171             :         case 26:
   12172         120 :                 info->name = "scaleMin";
   12173         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12174         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12175         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->scaleMin;
   12176         120 :                 return GF_OK;
   12177             :         case 27:
   12178         120 :                 info->name = "scaleMax";
   12179         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12180         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12181         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->scaleMax;
   12182         120 :                 return GF_OK;
   12183             :         case 28:
   12184         120 :                 info->name = "scaleNbBits";
   12185         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12186         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12187         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->scaleNbBits;
   12188         120 :                 return GF_OK;
   12189             :         case 29:
   12190         120 :                 info->name = "keyQuant";
   12191         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12192         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12193         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->keyQuant;
   12194         120 :                 return GF_OK;
   12195             :         case 30:
   12196         120 :                 info->name = "keyMin";
   12197         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12198         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12199         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->keyMin;
   12200         120 :                 return GF_OK;
   12201             :         case 31:
   12202         120 :                 info->name = "keyMax";
   12203         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12204         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12205         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->keyMax;
   12206         120 :                 return GF_OK;
   12207             :         case 32:
   12208         120 :                 info->name = "keyNbBits";
   12209         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12210         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12211         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->keyNbBits;
   12212         120 :                 return GF_OK;
   12213             :         case 33:
   12214         120 :                 info->name = "normalQuant";
   12215         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12216         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12217         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->normalQuant;
   12218         120 :                 return GF_OK;
   12219             :         case 34:
   12220         120 :                 info->name = "normalNbBits";
   12221         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12222         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12223         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->normalNbBits;
   12224         120 :                 return GF_OK;
   12225             :         case 35:
   12226         120 :                 info->name = "sizeQuant";
   12227         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12228         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12229         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->sizeQuant;
   12230         120 :                 return GF_OK;
   12231             :         case 36:
   12232         120 :                 info->name = "sizeMin";
   12233         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12234         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12235         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->sizeMin;
   12236         120 :                 return GF_OK;
   12237             :         case 37:
   12238         120 :                 info->name = "sizeMax";
   12239         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12240         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12241         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->sizeMax;
   12242         120 :                 return GF_OK;
   12243             :         case 38:
   12244         120 :                 info->name = "sizeNbBits";
   12245         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12246         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12247         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->sizeNbBits;
   12248         120 :                 return GF_OK;
   12249             :         case 39:
   12250         120 :                 info->name = "useEfficientCoding";
   12251         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   12252         120 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12253         120 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->useEfficientCoding;
   12254         120 :                 return GF_OK;
   12255             :         default:
   12256           0 :                 return GF_BAD_PARAM;
   12257             :         }
   12258        5310 : }
   12259             : 
   12260             : 
   12261             : static s32 QuantizationParameter_get_field_index_by_name(char *name)
   12262             : {
   12263         272 :         if (!strcmp("isLocal", name)) return 0;
   12264         136 :         if (!strcmp("position3DQuant", name)) return 1;
   12265         136 :         if (!strcmp("position3DMin", name)) return 2;
   12266         136 :         if (!strcmp("position3DMax", name)) return 3;
   12267         136 :         if (!strcmp("position3DNbBits", name)) return 4;
   12268         164 :         if (!strcmp("position2DQuant", name)) return 5;
   12269         136 :         if (!strcmp("position2DMin", name)) return 6;
   12270         108 :         if (!strcmp("position2DMax", name)) return 7;
   12271          80 :         if (!strcmp("position2DNbBits", name)) return 8;
   12272          24 :         if (!strcmp("drawOrderQuant", name)) return 9;
   12273          24 :         if (!strcmp("drawOrderMin", name)) return 10;
   12274          24 :         if (!strcmp("drawOrderMax", name)) return 11;
   12275          24 :         if (!strcmp("drawOrderNbBits", name)) return 12;
   12276          48 :         if (!strcmp("colorQuant", name)) return 13;
   12277           0 :         if (!strcmp("colorMin", name)) return 14;
   12278           0 :         if (!strcmp("colorMax", name)) return 15;
   12279           0 :         if (!strcmp("colorNbBits", name)) return 16;
   12280           0 :         if (!strcmp("textureCoordinateQuant", name)) return 17;
   12281           0 :         if (!strcmp("textureCoordinateMin", name)) return 18;
   12282           0 :         if (!strcmp("textureCoordinateMax", name)) return 19;
   12283           0 :         if (!strcmp("textureCoordinateNbBits", name)) return 20;
   12284           0 :         if (!strcmp("angleQuant", name)) return 21;
   12285           0 :         if (!strcmp("angleMin", name)) return 22;
   12286           0 :         if (!strcmp("angleMax", name)) return 23;
   12287           0 :         if (!strcmp("angleNbBits", name)) return 24;
   12288           0 :         if (!strcmp("scaleQuant", name)) return 25;
   12289           0 :         if (!strcmp("scaleMin", name)) return 26;
   12290           0 :         if (!strcmp("scaleMax", name)) return 27;
   12291           0 :         if (!strcmp("scaleNbBits", name)) return 28;
   12292           0 :         if (!strcmp("keyQuant", name)) return 29;
   12293           0 :         if (!strcmp("keyMin", name)) return 30;
   12294           0 :         if (!strcmp("keyMax", name)) return 31;
   12295           0 :         if (!strcmp("keyNbBits", name)) return 32;
   12296           0 :         if (!strcmp("normalQuant", name)) return 33;
   12297           0 :         if (!strcmp("normalNbBits", name)) return 34;
   12298           0 :         if (!strcmp("sizeQuant", name)) return 35;
   12299           0 :         if (!strcmp("sizeMin", name)) return 36;
   12300           0 :         if (!strcmp("sizeMax", name)) return 37;
   12301           0 :         if (!strcmp("sizeNbBits", name)) return 38;
   12302           0 :         if (!strcmp("useEfficientCoding", name)) return 39;
   12303           0 :         return -1;
   12304         136 : }
   12305             : static Bool QuantizationParameter_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12306             : {
   12307           0 :         switch (FieldIndex) {
   12308             :         case 2:
   12309           0 :                 *AType = 0;
   12310           0 :                 *QType = 0;
   12311           0 :                 *b_min = FIX_MIN;
   12312           0 :                 *b_max = FIX_MAX;
   12313           0 :                 return 1;
   12314             :         case 3:
   12315           0 :                 *AType = 0;
   12316           0 :                 *QType = 0;
   12317           0 :                 *b_min = FIX_MIN;
   12318           0 :                 *b_max = FIX_MAX;
   12319           0 :                 return 1;
   12320             :         case 4:
   12321           0 :                 *AType = 0;
   12322           0 :                 *QType = 13;
   12323           0 :                 *QT13_bits = 5;
   12324           0 :                 *b_min = FLT2FIX(0);
   12325           0 :                 *b_max = FLT2FIX(31);
   12326           0 :                 return 1;
   12327             :         case 6:
   12328           0 :                 *AType = 0;
   12329           0 :                 *QType = 0;
   12330           0 :                 *b_min = FIX_MIN;
   12331           0 :                 *b_max = FIX_MAX;
   12332           0 :                 return 1;
   12333             :         case 7:
   12334           0 :                 *AType = 0;
   12335           0 :                 *QType = 0;
   12336           0 :                 *b_min = FIX_MIN;
   12337           0 :                 *b_max = FIX_MAX;
   12338           0 :                 return 1;
   12339             :         case 8:
   12340           0 :                 *AType = 0;
   12341           0 :                 *QType = 13;
   12342           0 :                 *QT13_bits = 5;
   12343           0 :                 *b_min = FLT2FIX(0);
   12344           0 :                 *b_max = FLT2FIX(31);
   12345           0 :                 return 1;
   12346             :         case 10:
   12347           0 :                 *AType = 0;
   12348           0 :                 *QType = 0;
   12349           0 :                 *b_min = FIX_MIN;
   12350           0 :                 *b_max = FIX_MAX;
   12351           0 :                 return 1;
   12352             :         case 11:
   12353           0 :                 *AType = 0;
   12354           0 :                 *QType = 0;
   12355           0 :                 *b_min = FIX_MIN;
   12356           0 :                 *b_max = FIX_MAX;
   12357           0 :                 return 1;
   12358             :         case 12:
   12359           0 :                 *AType = 0;
   12360           0 :                 *QType = 13;
   12361           0 :                 *QT13_bits = 5;
   12362           0 :                 *b_min = FLT2FIX(0);
   12363           0 :                 *b_max = FLT2FIX(31);
   12364           0 :                 return 1;
   12365             :         case 14:
   12366           0 :                 *AType = 0;
   12367           0 :                 *QType = 0;
   12368           0 :                 *b_min = FLT2FIX(0);
   12369           0 :                 *b_max = FLT2FIX(1);
   12370           0 :                 return 1;
   12371             :         case 15:
   12372           0 :                 *AType = 0;
   12373           0 :                 *QType = 0;
   12374           0 :                 *b_min = FLT2FIX(0);
   12375           0 :                 *b_max = FLT2FIX(1);
   12376           0 :                 return 1;
   12377             :         case 16:
   12378           0 :                 *AType = 0;
   12379           0 :                 *QType = 13;
   12380           0 :                 *QT13_bits = 5;
   12381           0 :                 *b_min = FLT2FIX(0);
   12382           0 :                 *b_max = FLT2FIX(31);
   12383           0 :                 return 1;
   12384             :         case 18:
   12385           0 :                 *AType = 0;
   12386           0 :                 *QType = 0;
   12387           0 :                 *b_min = FLT2FIX(0);
   12388           0 :                 *b_max = FLT2FIX(1);
   12389           0 :                 return 1;
   12390             :         case 19:
   12391           0 :                 *AType = 0;
   12392           0 :                 *QType = 0;
   12393           0 :                 *b_min = FLT2FIX(0);
   12394           0 :                 *b_max = FLT2FIX(1);
   12395           0 :                 return 1;
   12396             :         case 20:
   12397           0 :                 *AType = 0;
   12398           0 :                 *QType = 13;
   12399           0 :                 *QT13_bits = 5;
   12400           0 :                 *b_min = FLT2FIX(0);
   12401           0 :                 *b_max = FLT2FIX(31);
   12402           0 :                 return 1;
   12403             :         case 22:
   12404           0 :                 *AType = 0;
   12405           0 :                 *QType = 0;
   12406           0 :                 *b_min = FLT2FIX(0);
   12407           0 :                 *b_max = FLT2FIX(6.2831853);
   12408           0 :                 return 1;
   12409             :         case 23:
   12410           0 :                 *AType = 0;
   12411           0 :                 *QType = 0;
   12412           0 :                 *b_min = FLT2FIX(0);
   12413           0 :                 *b_max = FLT2FIX(6.2831853);
   12414           0 :                 return 1;
   12415             :         case 24:
   12416           0 :                 *AType = 0;
   12417           0 :                 *QType = 13;
   12418           0 :                 *QT13_bits = 5;
   12419           0 :                 *b_min = FLT2FIX(0);
   12420           0 :                 *b_max = FLT2FIX(31);
   12421           0 :                 return 1;
   12422             :         case 26:
   12423           0 :                 *AType = 0;
   12424           0 :                 *QType = 0;
   12425           0 :                 *b_min = FIX_MIN;
   12426           0 :                 *b_max = FIX_MAX;
   12427           0 :                 return 1;
   12428             :         case 27:
   12429           0 :                 *AType = 0;
   12430           0 :                 *QType = 0;
   12431           0 :                 *b_min = FIX_MIN;
   12432           0 :                 *b_max = FIX_MAX;
   12433           0 :                 return 1;
   12434             :         case 28:
   12435           0 :                 *AType = 0;
   12436           0 :                 *QType = 13;
   12437           0 :                 *QT13_bits = 5;
   12438           0 :                 *b_min = FLT2FIX(0);
   12439           0 :                 *b_max = FLT2FIX(31);
   12440           0 :                 return 1;
   12441             :         case 30:
   12442           0 :                 *AType = 0;
   12443           0 :                 *QType = 0;
   12444           0 :                 *b_min = FIX_MIN;
   12445           0 :                 *b_max = FIX_MAX;
   12446           0 :                 return 1;
   12447             :         case 31:
   12448           0 :                 *AType = 0;
   12449           0 :                 *QType = 0;
   12450           0 :                 *b_min = FIX_MIN;
   12451           0 :                 *b_max = FIX_MAX;
   12452           0 :                 return 1;
   12453             :         case 32:
   12454           0 :                 *AType = 0;
   12455           0 :                 *QType = 13;
   12456           0 :                 *QT13_bits = 5;
   12457           0 :                 *b_min = FLT2FIX(0);
   12458           0 :                 *b_max = FLT2FIX(31);
   12459           0 :                 return 1;
   12460             :         case 34:
   12461           0 :                 *AType = 0;
   12462           0 :                 *QType = 13;
   12463           0 :                 *QT13_bits = 5;
   12464           0 :                 *b_min = FLT2FIX(0);
   12465           0 :                 *b_max = FLT2FIX(31);
   12466           0 :                 return 1;
   12467             :         case 36:
   12468           0 :                 *AType = 0;
   12469           0 :                 *QType = 0;
   12470           0 :                 *b_min = FIX_MIN;
   12471           0 :                 *b_max = FIX_MAX;
   12472           0 :                 return 1;
   12473             :         case 37:
   12474           0 :                 *AType = 0;
   12475           0 :                 *QType = 0;
   12476           0 :                 *b_min = FIX_MIN;
   12477           0 :                 *b_max = FIX_MAX;
   12478           0 :                 return 1;
   12479             :         case 38:
   12480           0 :                 *AType = 0;
   12481           0 :                 *QType = 13;
   12482           0 :                 *QT13_bits = 5;
   12483           0 :                 *b_min = FLT2FIX(0);
   12484           0 :                 *b_max = FLT2FIX(31);
   12485           0 :                 return 1;
   12486             :         default:
   12487           0 :                 return 0;
   12488             :         }
   12489           0 : }
   12490             : 
   12491             : 
   12492             : 
   12493             : GF_Node *QuantizationParameter_Create()
   12494             : {
   12495             :         M_QuantizationParameter *p;
   12496         369 :         GF_SAFEALLOC(p, M_QuantizationParameter);
   12497         123 :         if(!p) return NULL;
   12498         123 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_QuantizationParameter);
   12499             : 
   12500             :         /*default field values*/
   12501         123 :         p->position3DMin.x = FIX_MIN;
   12502         123 :         p->position3DMin.y = FIX_MIN;
   12503         123 :         p->position3DMin.z = FIX_MIN;
   12504         123 :         p->position3DMax.x = FIX_MAX;
   12505         123 :         p->position3DMax.y = FIX_MAX;
   12506         123 :         p->position3DMax.z = FIX_MAX;
   12507         123 :         p->position3DNbBits = 16;
   12508         123 :         p->position2DMin.x = FIX_MIN;
   12509         123 :         p->position2DMin.y = FIX_MIN;
   12510         123 :         p->position2DMax.x = FIX_MAX;
   12511         123 :         p->position2DMax.y = FIX_MAX;
   12512         123 :         p->position2DNbBits = 16;
   12513         123 :         p->drawOrderMin = FIX_MIN;
   12514         123 :         p->drawOrderMax = FIX_MAX;
   12515         123 :         p->drawOrderNbBits = 8;
   12516         123 :         p->colorQuant = 1;
   12517         123 :         p->colorMin = FLT2FIX(0.0);
   12518         123 :         p->colorMax = FLT2FIX(1.0);
   12519         123 :         p->colorNbBits = 8;
   12520         123 :         p->textureCoordinateQuant = 1;
   12521         123 :         p->textureCoordinateMin = FLT2FIX(0);
   12522         123 :         p->textureCoordinateMax = FLT2FIX(1);
   12523         123 :         p->textureCoordinateNbBits = 16;
   12524         123 :         p->angleQuant = 1;
   12525         123 :         p->angleMin = FLT2FIX(0.0);
   12526         123 :         p->angleMax = FLT2FIX(6.2831853);
   12527         123 :         p->angleNbBits = 16;
   12528         123 :         p->scaleMin = FLT2FIX(0.0);
   12529         123 :         p->scaleMax = FIX_MAX;
   12530         123 :         p->scaleNbBits = 8;
   12531         123 :         p->keyQuant = 1;
   12532         123 :         p->keyMin = FLT2FIX(0.0);
   12533         123 :         p->keyMax = FLT2FIX(1.0);
   12534         123 :         p->keyNbBits = 8;
   12535         123 :         p->normalQuant = 1;
   12536         123 :         p->normalNbBits = 8;
   12537         123 :         p->sizeMin = FLT2FIX(0);
   12538         123 :         p->sizeMax = FIX_MAX;
   12539         123 :         p->sizeNbBits = 8;
   12540         123 :         return (GF_Node *)p;
   12541         123 : }
   12542             : 
   12543             : 
   12544             : /*
   12545             :         Rectangle Node deletion
   12546             : */
   12547             : 
   12548             : static void Rectangle_Del(GF_Node *node)
   12549             : {
   12550       14270 :         M_Rectangle *p = (M_Rectangle *) node;
   12551        7135 :         gf_node_free((GF_Node *) p);
   12552        7135 : }
   12553             : 
   12554             : static const u16 Rectangle_Def2All[] = { 0};
   12555             : static const u16 Rectangle_In2All[] = { 0};
   12556             : static const u16 Rectangle_Out2All[] = { 0};
   12557             : static const u16 Rectangle_Dyn2All[] = { 0};
   12558             : 
   12559             : static u32 Rectangle_get_field_count(GF_Node *node, u8 IndexMode)
   12560             : {
   12561       13010 :         switch(IndexMode) {
   12562             :         case GF_SG_FIELD_CODING_IN:
   12563           0 :                 return 1;
   12564             :         case GF_SG_FIELD_CODING_DEF:
   12565        2200 :                 return 1;
   12566             :         case GF_SG_FIELD_CODING_OUT:
   12567           0 :                 return 1;
   12568             :         case GF_SG_FIELD_CODING_DYN:
   12569           0 :                 return 1;
   12570             :         default:
   12571        4305 :                 return 1;
   12572             :         }
   12573        6505 : }
   12574             : 
   12575             : static GF_Err Rectangle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12576             : {
   12577        3392 :         switch(IndexMode) {
   12578             :         case GF_SG_FIELD_CODING_IN:
   12579           0 :                 *allField = Rectangle_In2All[inField];
   12580           0 :                 return GF_OK;
   12581             :         case GF_SG_FIELD_CODING_DEF:
   12582        1696 :                 *allField = Rectangle_Def2All[inField];
   12583        1696 :                 return GF_OK;
   12584             :         case GF_SG_FIELD_CODING_OUT:
   12585           0 :                 *allField = Rectangle_Out2All[inField];
   12586           0 :                 return GF_OK;
   12587             :         case GF_SG_FIELD_CODING_DYN:
   12588           0 :                 *allField = Rectangle_Dyn2All[inField];
   12589           0 :                 return GF_OK;
   12590             :         default:
   12591           0 :                 return GF_BAD_PARAM;
   12592             :         }
   12593        1696 : }
   12594             : static GF_Err Rectangle_get_field(GF_Node *node, GF_FieldInfo *info)
   12595             : {
   12596       26484 :         switch (info->fieldIndex) {
   12597             :         case 0:
   12598       13242 :                 info->name = "size";
   12599       13242 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12600       13242 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   12601       13242 :                 info->far_ptr = & ((M_Rectangle *) node)->size;
   12602       13242 :                 return GF_OK;
   12603             :         default:
   12604           0 :                 return GF_BAD_PARAM;
   12605             :         }
   12606       13242 : }
   12607             : 
   12608             : 
   12609             : static s32 Rectangle_get_field_index_by_name(char *name)
   12610             : {
   12611        2967 :         if (!strcmp("size", name)) return 0;
   12612           0 :         return -1;
   12613         989 : }
   12614             : static Bool Rectangle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12615             : {
   12616           0 :         switch (FieldIndex) {
   12617             :         case 0:
   12618           0 :                 *AType = 2;
   12619           0 :                 *QType = 12;
   12620           0 :                 *b_min = FLT2FIX(0);
   12621           0 :                 *b_max = FIX_MAX;
   12622           0 :                 return 1;
   12623             :         default:
   12624           0 :                 return 0;
   12625             :         }
   12626           0 : }
   12627             : 
   12628             : 
   12629             : 
   12630             : GF_Node *Rectangle_Create()
   12631             : {
   12632             :         M_Rectangle *p;
   12633       21405 :         GF_SAFEALLOC(p, M_Rectangle);
   12634        7135 :         if(!p) return NULL;
   12635        7135 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Rectangle);
   12636             : 
   12637             :         /*default field values*/
   12638        7135 :         p->size.x = FLT2FIX(2);
   12639        7135 :         p->size.y = FLT2FIX(2);
   12640        7135 :         return (GF_Node *)p;
   12641        7135 : }
   12642             : 
   12643             : 
   12644             : /*
   12645             :         ScalarInterpolator Node deletion
   12646             : */
   12647             : 
   12648             : static void ScalarInterpolator_Del(GF_Node *node)
   12649             : {
   12650        1518 :         M_ScalarInterpolator *p = (M_ScalarInterpolator *) node;
   12651         759 :         gf_sg_mffloat_del(p->key);
   12652         759 :         gf_sg_mffloat_del(p->keyValue);
   12653         759 :         gf_node_free((GF_Node *) p);
   12654         759 : }
   12655             : 
   12656             : static const u16 ScalarInterpolator_Def2All[] = { 1, 2};
   12657             : static const u16 ScalarInterpolator_In2All[] = { 0, 1, 2};
   12658             : static const u16 ScalarInterpolator_Out2All[] = { 1, 2, 3};
   12659             : 
   12660             : static u32 ScalarInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
   12661             : {
   12662        3028 :         switch(IndexMode) {
   12663             :         case GF_SG_FIELD_CODING_IN:
   12664         378 :                 return 3;
   12665             :         case GF_SG_FIELD_CODING_DEF:
   12666         364 :                 return 2;
   12667             :         case GF_SG_FIELD_CODING_OUT:
   12668         459 :                 return 3;
   12669             :         case GF_SG_FIELD_CODING_DYN:
   12670           0 :                 return 0;
   12671             :         default:
   12672         313 :                 return 4;
   12673             :         }
   12674        1514 : }
   12675             : 
   12676             : static GF_Err ScalarInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12677             : {
   12678        2830 :         switch(IndexMode) {
   12679             :         case GF_SG_FIELD_CODING_IN:
   12680         294 :                 *allField = ScalarInterpolator_In2All[inField];
   12681         294 :                 return GF_OK;
   12682             :         case GF_SG_FIELD_CODING_DEF:
   12683         560 :                 *allField = ScalarInterpolator_Def2All[inField];
   12684         560 :                 return GF_OK;
   12685             :         case GF_SG_FIELD_CODING_OUT:
   12686         561 :                 *allField = ScalarInterpolator_Out2All[inField];
   12687         561 :                 return GF_OK;
   12688             :         default:
   12689           0 :                 return GF_BAD_PARAM;
   12690             :         }
   12691        1415 : }
   12692             : static GF_Err ScalarInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
   12693             : {
   12694        8236 :         switch (info->fieldIndex) {
   12695             :         case 0:
   12696         635 :                 info->name = "set_fraction";
   12697         635 :                 info->eventType = GF_SG_EVENT_IN;
   12698         635 :                 info->on_event_in = ((M_ScalarInterpolator *)node)->on_set_fraction;
   12699         635 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12700         635 :                 info->far_ptr = & ((M_ScalarInterpolator *) node)->set_fraction;
   12701         635 :                 return GF_OK;
   12702             :         case 1:
   12703        1388 :                 info->name = "key";
   12704        1388 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12705        1388 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   12706        1388 :                 info->far_ptr = & ((M_ScalarInterpolator *) node)->key;
   12707        1388 :                 return GF_OK;
   12708             :         case 2:
   12709        1388 :                 info->name = "keyValue";
   12710        1388 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12711        1388 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   12712        1388 :                 info->far_ptr = & ((M_ScalarInterpolator *) node)->keyValue;
   12713        1388 :                 return GF_OK;
   12714             :         case 3:
   12715         707 :                 info->name = "value_changed";
   12716         707 :                 info->eventType = GF_SG_EVENT_OUT;
   12717         707 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12718         707 :                 info->far_ptr = & ((M_ScalarInterpolator *) node)->value_changed;
   12719         707 :                 return GF_OK;
   12720             :         default:
   12721           0 :                 return GF_BAD_PARAM;
   12722             :         }
   12723        4118 : }
   12724             : 
   12725             : 
   12726             : static s32 ScalarInterpolator_get_field_index_by_name(char *name)
   12727             : {
   12728        1584 :         if (!strcmp("set_fraction", name)) return 0;
   12729         708 :         if (!strcmp("key", name)) return 1;
   12730         540 :         if (!strcmp("keyValue", name)) return 2;
   12731         408 :         if (!strcmp("value_changed", name)) return 3;
   12732           0 :         return -1;
   12733         708 : }
   12734             : static Bool ScalarInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12735             : {
   12736           0 :         switch (FieldIndex) {
   12737             :         case 1:
   12738           0 :                 *AType = 0;
   12739           0 :                 *QType = 8;
   12740           0 :                 *b_min = FLT2FIX(0);
   12741           0 :                 *b_max = FLT2FIX(1);
   12742           0 :                 return 1;
   12743             :         case 2:
   12744           0 :                 *AType = 0;
   12745           0 :                 *QType = 0;
   12746           0 :                 *b_min = FIX_MIN;
   12747           0 :                 *b_max = FIX_MAX;
   12748           0 :                 return 1;
   12749             :         default:
   12750           0 :                 return 0;
   12751             :         }
   12752           0 : }
   12753             : 
   12754             : 
   12755             : 
   12756             : GF_Node *ScalarInterpolator_Create()
   12757             : {
   12758             :         M_ScalarInterpolator *p;
   12759        2277 :         GF_SAFEALLOC(p, M_ScalarInterpolator);
   12760         759 :         if(!p) return NULL;
   12761         759 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ScalarInterpolator);
   12762             : 
   12763             :         /*default field values*/
   12764         759 :         return (GF_Node *)p;
   12765         759 : }
   12766             : 
   12767             : 
   12768             : /*
   12769             :         Script Node deletion
   12770             : */
   12771             : 
   12772             : static void Script_Del(GF_Node *node)
   12773             : {
   12774         818 :         M_Script *p = (M_Script *) node;
   12775         409 :         gf_sg_mfscript_del(p->url);
   12776         409 :         gf_node_free((GF_Node *) p);
   12777         409 : }
   12778             : 
   12779             : static const u16 Script_Def2All[] = { 0, 1, 2};
   12780             : static const u16 Script_In2All[] = { 0};
   12781             : static const u16 Script_Out2All[] = { 0};
   12782             : 
   12783             : static u32 Script_get_field_count(GF_Node *node, u8 IndexMode)
   12784             : {
   12785           0 :         switch(IndexMode) {
   12786             :         case GF_SG_FIELD_CODING_IN:
   12787           0 :                 return 1;
   12788             :         case GF_SG_FIELD_CODING_DEF:
   12789           0 :                 return 3;
   12790             :         case GF_SG_FIELD_CODING_OUT:
   12791           0 :                 return 1;
   12792             :         case GF_SG_FIELD_CODING_DYN:
   12793           0 :                 return 0;
   12794             :         default:
   12795           0 :                 return 3;
   12796             :         }
   12797           0 : }
   12798             : 
   12799             : static GF_Err Script_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12800             : {
   12801        2058 :         switch(IndexMode) {
   12802             :         case GF_SG_FIELD_CODING_IN:
   12803         706 :                 *allField = Script_In2All[inField];
   12804         706 :                 return GF_OK;
   12805             :         case GF_SG_FIELD_CODING_DEF:
   12806         303 :                 *allField = Script_Def2All[inField];
   12807         303 :                 return GF_OK;
   12808             :         case GF_SG_FIELD_CODING_OUT:
   12809          20 :                 *allField = Script_Out2All[inField];
   12810          20 :                 return GF_OK;
   12811             :         default:
   12812           0 :                 return GF_BAD_PARAM;
   12813             :         }
   12814        1029 : }
   12815             : static GF_Err Script_get_field(GF_Node *node, GF_FieldInfo *info)
   12816             : {
   12817       19862 :         switch (info->fieldIndex) {
   12818             :         case 0:
   12819        3527 :                 info->name = "url";
   12820        3527 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12821        3527 :                 info->fieldType = GF_SG_VRML_MFSCRIPT;
   12822        3527 :                 info->far_ptr = & ((M_Script *) node)->url;
   12823        3527 :                 return GF_OK;
   12824             :         case 1:
   12825        3202 :                 info->name = "directOutput";
   12826        3202 :                 info->eventType = GF_SG_EVENT_FIELD;
   12827        3202 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12828        3202 :                 info->far_ptr = & ((M_Script *) node)->directOutput;
   12829        3202 :                 return GF_OK;
   12830             :         case 2:
   12831        3202 :                 info->name = "mustEvaluate";
   12832        3202 :                 info->eventType = GF_SG_EVENT_FIELD;
   12833        3202 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12834        3202 :                 info->far_ptr = & ((M_Script *) node)->mustEvaluate;
   12835        3202 :                 return GF_OK;
   12836             :         default:
   12837           0 :                 return GF_BAD_PARAM;
   12838             :         }
   12839        9931 : }
   12840             : 
   12841             : 
   12842             : static s32 Script_get_field_index_by_name(char *name)
   12843             : {
   12844           0 :         if (!strcmp("url", name)) return 0;
   12845           0 :         if (!strcmp("directOutput", name)) return 1;
   12846           0 :         if (!strcmp("mustEvaluate", name)) return 2;
   12847           0 :         return -1;
   12848           0 : }
   12849             : static Bool Script_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12850             : {
   12851             :         switch (FieldIndex) {
   12852             :         default:
   12853           0 :                 return 0;
   12854             :         }
   12855             : }
   12856             : 
   12857             : 
   12858             : 
   12859             : GF_Node *Script_Create()
   12860             : {
   12861             :         M_Script *p;
   12862        1227 :         GF_SAFEALLOC(p, M_Script);
   12863         409 :         if(!p) return NULL;
   12864         409 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Script);
   12865             : 
   12866             :         /*default field values*/
   12867         409 :         return (GF_Node *)p;
   12868         409 : }
   12869             : 
   12870             : 
   12871             : /*
   12872             :         Shape Node deletion
   12873             : */
   12874             : 
   12875             : static void Shape_Del(GF_Node *node)
   12876             : {
   12877       64742 :         M_Shape *p = (M_Shape *) node;
   12878       32371 :         gf_node_unregister((GF_Node *) p->appearance, (GF_Node *) p);
   12879       32371 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   12880       32371 :         gf_node_free((GF_Node *) p);
   12881       32371 : }
   12882             : 
   12883             : static const u16 Shape_Def2All[] = { 0, 1};
   12884             : static const u16 Shape_In2All[] = { 0, 1};
   12885             : static const u16 Shape_Out2All[] = { 0, 1};
   12886             : 
   12887             : static u32 Shape_get_field_count(GF_Node *node, u8 IndexMode)
   12888             : {
   12889       56168 :         switch(IndexMode) {
   12890             :         case GF_SG_FIELD_CODING_IN:
   12891           0 :                 return 2;
   12892             :         case GF_SG_FIELD_CODING_DEF:
   12893       13306 :                 return 2;
   12894             :         case GF_SG_FIELD_CODING_OUT:
   12895           0 :                 return 2;
   12896             :         case GF_SG_FIELD_CODING_DYN:
   12897           0 :                 return 0;
   12898             :         default:
   12899       14778 :                 return 2;
   12900             :         }
   12901       28084 : }
   12902             : 
   12903             : static GF_Err Shape_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12904             : {
   12905       39208 :         switch(IndexMode) {
   12906             :         case GF_SG_FIELD_CODING_IN:
   12907           0 :                 *allField = Shape_In2All[inField];
   12908           0 :                 return GF_OK;
   12909             :         case GF_SG_FIELD_CODING_DEF:
   12910       19604 :                 *allField = Shape_Def2All[inField];
   12911       19604 :                 return GF_OK;
   12912             :         case GF_SG_FIELD_CODING_OUT:
   12913           0 :                 *allField = Shape_Out2All[inField];
   12914           0 :                 return GF_OK;
   12915             :         default:
   12916           0 :                 return GF_BAD_PARAM;
   12917             :         }
   12918       19604 : }
   12919             : static GF_Err Shape_get_field(GF_Node *node, GF_FieldInfo *info)
   12920             : {
   12921      158104 :         switch (info->fieldIndex) {
   12922             :         case 0:
   12923       38921 :                 info->name = "appearance";
   12924       38921 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12925       38921 :                 info->fieldType = GF_SG_VRML_SFNODE;
   12926       38921 :                 info->NDTtype = NDT_SFAppearanceNode;
   12927       38921 :                 info->far_ptr = & ((M_Shape *)node)->appearance;
   12928       38921 :                 return GF_OK;
   12929             :         case 1:
   12930       40131 :                 info->name = "geometry";
   12931       40131 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12932       40131 :                 info->fieldType = GF_SG_VRML_SFNODE;
   12933       40131 :                 info->NDTtype = NDT_SFGeometryNode;
   12934       40131 :                 info->far_ptr = & ((M_Shape *)node)->geometry;
   12935       40131 :                 return GF_OK;
   12936             :         default:
   12937           0 :                 return GF_BAD_PARAM;
   12938             :         }
   12939       79052 : }
   12940             : 
   12941             : 
   12942             : static s32 Shape_get_field_index_by_name(char *name)
   12943             : {
   12944       30575 :         if (!strcmp("appearance", name)) return 0;
   12945       13400 :         if (!strcmp("geometry", name)) return 1;
   12946           0 :         return -1;
   12947       12425 : }
   12948             : static Bool Shape_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12949             : {
   12950             :         switch (FieldIndex) {
   12951             :         default:
   12952           0 :                 return 0;
   12953             :         }
   12954             : }
   12955             : 
   12956             : 
   12957             : 
   12958             : GF_Node *Shape_Create()
   12959             : {
   12960             :         M_Shape *p;
   12961       97113 :         GF_SAFEALLOC(p, M_Shape);
   12962       32371 :         if(!p) return NULL;
   12963       32371 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Shape);
   12964             : 
   12965             :         /*default field values*/
   12966       32371 :         return (GF_Node *)p;
   12967       32371 : }
   12968             : 
   12969             : 
   12970             : /*
   12971             :         Sound Node deletion
   12972             : */
   12973             : 
   12974             : static void Sound_Del(GF_Node *node)
   12975             : {
   12976          72 :         M_Sound *p = (M_Sound *) node;
   12977          36 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   12978          36 :         gf_node_free((GF_Node *) p);
   12979          36 : }
   12980             : 
   12981             : static const u16 Sound_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   12982             : static const u16 Sound_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   12983             : static const u16 Sound_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   12984             : static const u16 Sound_Dyn2All[] = { 1, 2, 3, 4, 5, 6};
   12985             : 
   12986             : static u32 Sound_get_field_count(GF_Node *node, u8 IndexMode)
   12987             : {
   12988          64 :         switch(IndexMode) {
   12989             :         case GF_SG_FIELD_CODING_IN:
   12990           0 :                 return 9;
   12991             :         case GF_SG_FIELD_CODING_DEF:
   12992          18 :                 return 10;
   12993             :         case GF_SG_FIELD_CODING_OUT:
   12994           0 :                 return 9;
   12995             :         case GF_SG_FIELD_CODING_DYN:
   12996           0 :                 return 6;
   12997             :         default:
   12998          14 :                 return 10;
   12999             :         }
   13000          32 : }
   13001             : 
   13002             : static GF_Err Sound_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13003             : {
   13004         130 :         switch(IndexMode) {
   13005             :         case GF_SG_FIELD_CODING_IN:
   13006           0 :                 *allField = Sound_In2All[inField];
   13007           0 :                 return GF_OK;
   13008             :         case GF_SG_FIELD_CODING_DEF:
   13009          65 :                 *allField = Sound_Def2All[inField];
   13010          65 :                 return GF_OK;
   13011             :         case GF_SG_FIELD_CODING_OUT:
   13012           0 :                 *allField = Sound_Out2All[inField];
   13013           0 :                 return GF_OK;
   13014             :         case GF_SG_FIELD_CODING_DYN:
   13015           0 :                 *allField = Sound_Dyn2All[inField];
   13016           0 :                 return GF_OK;
   13017             :         default:
   13018           0 :                 return GF_BAD_PARAM;
   13019             :         }
   13020          65 : }
   13021             : static GF_Err Sound_get_field(GF_Node *node, GF_FieldInfo *info)
   13022             : {
   13023         838 :         switch (info->fieldIndex) {
   13024             :         case 0:
   13025          36 :                 info->name = "direction";
   13026          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13027          36 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13028          36 :                 info->far_ptr = & ((M_Sound *) node)->direction;
   13029          36 :                 return GF_OK;
   13030             :         case 1:
   13031          36 :                 info->name = "intensity";
   13032          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13033          36 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13034          36 :                 info->far_ptr = & ((M_Sound *) node)->intensity;
   13035          36 :                 return GF_OK;
   13036             :         case 2:
   13037          66 :                 info->name = "location";
   13038          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13039          66 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13040          66 :                 info->far_ptr = & ((M_Sound *) node)->location;
   13041          66 :                 return GF_OK;
   13042             :         case 3:
   13043          36 :                 info->name = "maxBack";
   13044          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13045          36 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13046          36 :                 info->far_ptr = & ((M_Sound *) node)->maxBack;
   13047          36 :                 return GF_OK;
   13048             :         case 4:
   13049          36 :                 info->name = "maxFront";
   13050          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13051          36 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13052          36 :                 info->far_ptr = & ((M_Sound *) node)->maxFront;
   13053          36 :                 return GF_OK;
   13054             :         case 5:
   13055          36 :                 info->name = "minBack";
   13056          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13057          36 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13058          36 :                 info->far_ptr = & ((M_Sound *) node)->minBack;
   13059          36 :                 return GF_OK;
   13060             :         case 6:
   13061          36 :                 info->name = "minFront";
   13062          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13063          36 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13064          36 :                 info->far_ptr = & ((M_Sound *) node)->minFront;
   13065          36 :                 return GF_OK;
   13066             :         case 7:
   13067          36 :                 info->name = "priority";
   13068          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13069          36 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13070          36 :                 info->far_ptr = & ((M_Sound *) node)->priority;
   13071          36 :                 return GF_OK;
   13072             :         case 8:
   13073          48 :                 info->name = "source";
   13074          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13075          48 :                 info->fieldType = GF_SG_VRML_SFNODE;
   13076          48 :                 info->NDTtype = NDT_SFAudioNode;
   13077          48 :                 info->far_ptr = & ((M_Sound *)node)->source;
   13078          48 :                 return GF_OK;
   13079             :         case 9:
   13080          53 :                 info->name = "spatialize";
   13081          53 :                 info->eventType = GF_SG_EVENT_FIELD;
   13082          53 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13083          53 :                 info->far_ptr = & ((M_Sound *) node)->spatialize;
   13084          53 :                 return GF_OK;
   13085             :         default:
   13086           0 :                 return GF_BAD_PARAM;
   13087             :         }
   13088         419 : }
   13089             : 
   13090             : 
   13091             : static s32 Sound_get_field_index_by_name(char *name)
   13092             : {
   13093          44 :         if (!strcmp("direction", name)) return 0;
   13094          22 :         if (!strcmp("intensity", name)) return 1;
   13095          30 :         if (!strcmp("location", name)) return 2;
   13096          14 :         if (!strcmp("maxBack", name)) return 3;
   13097          14 :         if (!strcmp("maxFront", name)) return 4;
   13098          14 :         if (!strcmp("minBack", name)) return 5;
   13099          14 :         if (!strcmp("minFront", name)) return 6;
   13100          14 :         if (!strcmp("priority", name)) return 7;
   13101          22 :         if (!strcmp("source", name)) return 8;
   13102          12 :         if (!strcmp("spatialize", name)) return 9;
   13103           0 :         return -1;
   13104          22 : }
   13105             : static Bool Sound_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13106             : {
   13107           0 :         switch (FieldIndex) {
   13108             :         case 0:
   13109           0 :                 *AType = 0;
   13110           0 :                 *QType = 9;
   13111           0 :                 *b_min = FIX_MIN;
   13112           0 :                 *b_max = FIX_MAX;
   13113           0 :                 return 1;
   13114             :         case 1:
   13115           0 :                 *AType = 7;
   13116           0 :                 *QType = 4;
   13117           0 :                 *b_min = FLT2FIX(0);
   13118           0 :                 *b_max = FLT2FIX(1);
   13119           0 :                 return 1;
   13120             :         case 2:
   13121           0 :                 *AType = 1;
   13122           0 :                 *QType = 1;
   13123           0 :                 *b_min = FIX_MIN;
   13124           0 :                 *b_max = FIX_MAX;
   13125           0 :                 return 1;
   13126             :         case 3:
   13127           0 :                 *AType = 7;
   13128           0 :                 *QType = 11;
   13129           0 :                 *b_min = FLT2FIX(0);
   13130           0 :                 *b_max = FIX_MAX;
   13131           0 :                 return 1;
   13132             :         case 4:
   13133           0 :                 *AType = 7;
   13134           0 :                 *QType = 11;
   13135           0 :                 *b_min = FLT2FIX(0);
   13136           0 :                 *b_max = FIX_MAX;
   13137           0 :                 return 1;
   13138             :         case 5:
   13139           0 :                 *AType = 7;
   13140           0 :                 *QType = 11;
   13141           0 :                 *b_min = FLT2FIX(0);
   13142           0 :                 *b_max = FIX_MAX;
   13143           0 :                 return 1;
   13144             :         case 6:
   13145           0 :                 *AType = 7;
   13146           0 :                 *QType = 11;
   13147           0 :                 *b_min = FLT2FIX(0);
   13148           0 :                 *b_max = FIX_MAX;
   13149           0 :                 return 1;
   13150             :         case 7:
   13151           0 :                 *AType = 0;
   13152           0 :                 *QType = 4;
   13153           0 :                 *b_min = FLT2FIX(0);
   13154           0 :                 *b_max = FLT2FIX(1);
   13155           0 :                 return 1;
   13156             :         default:
   13157           0 :                 return 0;
   13158             :         }
   13159           0 : }
   13160             : 
   13161             : 
   13162             : 
   13163             : GF_Node *Sound_Create()
   13164             : {
   13165             :         M_Sound *p;
   13166         108 :         GF_SAFEALLOC(p, M_Sound);
   13167          36 :         if(!p) return NULL;
   13168          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Sound);
   13169             : 
   13170             :         /*default field values*/
   13171          36 :         p->direction.x = FLT2FIX(0);
   13172          36 :         p->direction.y = FLT2FIX(0);
   13173          36 :         p->direction.z = FLT2FIX(1);
   13174          36 :         p->intensity = FLT2FIX(1);
   13175          36 :         p->location.x = FLT2FIX(0);
   13176          36 :         p->location.y = FLT2FIX(0);
   13177          36 :         p->location.z = FLT2FIX(0);
   13178          36 :         p->maxBack = FLT2FIX(10);
   13179          36 :         p->maxFront = FLT2FIX(10);
   13180          36 :         p->minBack = FLT2FIX(1);
   13181          36 :         p->minFront = FLT2FIX(1);
   13182          36 :         p->priority = FLT2FIX(0);
   13183          36 :         p->spatialize = 1;
   13184          36 :         return (GF_Node *)p;
   13185          36 : }
   13186             : 
   13187             : 
   13188             : /*
   13189             :         Sound2D Node deletion
   13190             : */
   13191             : 
   13192             : static void Sound2D_Del(GF_Node *node)
   13193             : {
   13194         362 :         M_Sound2D *p = (M_Sound2D *) node;
   13195         181 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   13196         181 :         gf_node_free((GF_Node *) p);
   13197         181 : }
   13198             : 
   13199             : static const u16 Sound2D_Def2All[] = { 0, 1, 2, 3};
   13200             : static const u16 Sound2D_In2All[] = { 0, 1, 2};
   13201             : static const u16 Sound2D_Out2All[] = { 0, 1, 2};
   13202             : static const u16 Sound2D_Dyn2All[] = { 0, 1};
   13203             : 
   13204             : static u32 Sound2D_get_field_count(GF_Node *node, u8 IndexMode)
   13205             : {
   13206         322 :         switch(IndexMode) {
   13207             :         case GF_SG_FIELD_CODING_IN:
   13208           0 :                 return 3;
   13209             :         case GF_SG_FIELD_CODING_DEF:
   13210          85 :                 return 4;
   13211             :         case GF_SG_FIELD_CODING_OUT:
   13212           0 :                 return 3;
   13213             :         case GF_SG_FIELD_CODING_DYN:
   13214           0 :                 return 2;
   13215             :         default:
   13216          76 :                 return 4;
   13217             :         }
   13218         161 : }
   13219             : 
   13220             : static GF_Err Sound2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13221             : {
   13222         242 :         switch(IndexMode) {
   13223             :         case GF_SG_FIELD_CODING_IN:
   13224           0 :                 *allField = Sound2D_In2All[inField];
   13225           0 :                 return GF_OK;
   13226             :         case GF_SG_FIELD_CODING_DEF:
   13227         121 :                 *allField = Sound2D_Def2All[inField];
   13228         121 :                 return GF_OK;
   13229             :         case GF_SG_FIELD_CODING_OUT:
   13230           0 :                 *allField = Sound2D_Out2All[inField];
   13231           0 :                 return GF_OK;
   13232             :         case GF_SG_FIELD_CODING_DYN:
   13233           0 :                 *allField = Sound2D_Dyn2All[inField];
   13234           0 :                 return GF_OK;
   13235             :         default:
   13236           0 :                 return GF_BAD_PARAM;
   13237             :         }
   13238         121 : }
   13239             : static GF_Err Sound2D_get_field(GF_Node *node, GF_FieldInfo *info)
   13240             : {
   13241        1564 :         switch (info->fieldIndex) {
   13242             :         case 0:
   13243         190 :                 info->name = "intensity";
   13244         190 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13245         190 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13246         190 :                 info->far_ptr = & ((M_Sound2D *) node)->intensity;
   13247         190 :                 return GF_OK;
   13248             :         case 1:
   13249         176 :                 info->name = "location";
   13250         176 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13251         176 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   13252         176 :                 info->far_ptr = & ((M_Sound2D *) node)->location;
   13253         176 :                 return GF_OK;
   13254             :         case 2:
   13255         240 :                 info->name = "source";
   13256         240 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13257         240 :                 info->fieldType = GF_SG_VRML_SFNODE;
   13258         240 :                 info->NDTtype = NDT_SFAudioNode;
   13259         240 :                 info->far_ptr = & ((M_Sound2D *)node)->source;
   13260         240 :                 return GF_OK;
   13261             :         case 3:
   13262         176 :                 info->name = "spatialize";
   13263         176 :                 info->eventType = GF_SG_EVENT_FIELD;
   13264         176 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13265         176 :                 info->far_ptr = & ((M_Sound2D *) node)->spatialize;
   13266         176 :                 return GF_OK;
   13267             :         default:
   13268           0 :                 return GF_BAD_PARAM;
   13269             :         }
   13270         782 : }
   13271             : 
   13272             : 
   13273             : static s32 Sound2D_get_field_index_by_name(char *name)
   13274             : {
   13275          94 :         if (!strcmp("intensity", name)) return 0;
   13276          41 :         if (!strcmp("location", name)) return 1;
   13277          82 :         if (!strcmp("source", name)) return 2;
   13278           0 :         if (!strcmp("spatialize", name)) return 3;
   13279           0 :         return -1;
   13280          45 : }
   13281             : static Bool Sound2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13282             : {
   13283           0 :         switch (FieldIndex) {
   13284             :         case 0:
   13285           0 :                 *AType = 7;
   13286           0 :                 *QType = 4;
   13287           0 :                 *b_min = FLT2FIX(0);
   13288           0 :                 *b_max = FLT2FIX(1);
   13289           0 :                 return 1;
   13290             :         case 1:
   13291           0 :                 *AType = 2;
   13292           0 :                 *QType = 2;
   13293           0 :                 *b_min = FIX_MIN;
   13294           0 :                 *b_max = FIX_MAX;
   13295           0 :                 return 1;
   13296             :         default:
   13297           0 :                 return 0;
   13298             :         }
   13299           0 : }
   13300             : 
   13301             : 
   13302             : 
   13303             : GF_Node *Sound2D_Create()
   13304             : {
   13305             :         M_Sound2D *p;
   13306         543 :         GF_SAFEALLOC(p, M_Sound2D);
   13307         181 :         if(!p) return NULL;
   13308         181 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Sound2D);
   13309             : 
   13310             :         /*default field values*/
   13311         181 :         p->intensity = FLT2FIX(1);
   13312         181 :         p->location.x = FLT2FIX(0);
   13313         181 :         p->location.y = FLT2FIX(0);
   13314         181 :         p->spatialize = 1;
   13315         181 :         return (GF_Node *)p;
   13316         181 : }
   13317             : 
   13318             : 
   13319             : /*
   13320             :         Sphere Node deletion
   13321             : */
   13322             : 
   13323             : static void Sphere_Del(GF_Node *node)
   13324             : {
   13325         396 :         M_Sphere *p = (M_Sphere *) node;
   13326         198 :         gf_node_free((GF_Node *) p);
   13327         198 : }
   13328             : 
   13329             : static const u16 Sphere_Def2All[] = { 0};
   13330             : 
   13331             : static u32 Sphere_get_field_count(GF_Node *node, u8 IndexMode)
   13332             : {
   13333         352 :         switch(IndexMode) {
   13334             :         case GF_SG_FIELD_CODING_IN:
   13335           0 :                 return 0;
   13336             :         case GF_SG_FIELD_CODING_DEF:
   13337          99 :                 return 1;
   13338             :         case GF_SG_FIELD_CODING_OUT:
   13339           0 :                 return 0;
   13340             :         case GF_SG_FIELD_CODING_DYN:
   13341           0 :                 return 0;
   13342             :         default:
   13343          77 :                 return 1;
   13344             :         }
   13345         176 : }
   13346             : 
   13347             : static GF_Err Sphere_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13348             : {
   13349         144 :         switch(IndexMode) {
   13350             :         case GF_SG_FIELD_CODING_DEF:
   13351          72 :                 *allField = Sphere_Def2All[inField];
   13352          72 :                 return GF_OK;
   13353             :         default:
   13354           0 :                 return GF_BAD_PARAM;
   13355             :         }
   13356          72 : }
   13357             : static GF_Err Sphere_get_field(GF_Node *node, GF_FieldInfo *info)
   13358             : {
   13359         700 :         switch (info->fieldIndex) {
   13360             :         case 0:
   13361         350 :                 info->name = "radius";
   13362         350 :                 info->eventType = GF_SG_EVENT_FIELD;
   13363         350 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13364         350 :                 info->far_ptr = & ((M_Sphere *) node)->radius;
   13365         350 :                 return GF_OK;
   13366             :         default:
   13367           0 :                 return GF_BAD_PARAM;
   13368             :         }
   13369         350 : }
   13370             : 
   13371             : 
   13372             : static s32 Sphere_get_field_index_by_name(char *name)
   13373             : {
   13374         126 :         if (!strcmp("radius", name)) return 0;
   13375           0 :         return -1;
   13376          42 : }
   13377             : static Bool Sphere_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13378             : {
   13379           0 :         switch (FieldIndex) {
   13380             :         case 0:
   13381           0 :                 *AType = 0;
   13382           0 :                 *QType = 11;
   13383           0 :                 *b_min = FLT2FIX(0);
   13384           0 :                 *b_max = FIX_MAX;
   13385           0 :                 return 1;
   13386             :         default:
   13387           0 :                 return 0;
   13388             :         }
   13389           0 : }
   13390             : 
   13391             : 
   13392             : 
   13393             : GF_Node *Sphere_Create()
   13394             : {
   13395             :         M_Sphere *p;
   13396         594 :         GF_SAFEALLOC(p, M_Sphere);
   13397         198 :         if(!p) return NULL;
   13398         198 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Sphere);
   13399             : 
   13400             :         /*default field values*/
   13401         198 :         p->radius = FLT2FIX(1);
   13402         198 :         return (GF_Node *)p;
   13403         198 : }
   13404             : 
   13405             : 
   13406             : /*
   13407             :         SphereSensor Node deletion
   13408             : */
   13409             : 
   13410             : static void SphereSensor_Del(GF_Node *node)
   13411             : {
   13412          36 :         M_SphereSensor *p = (M_SphereSensor *) node;
   13413          18 :         gf_node_free((GF_Node *) p);
   13414          18 : }
   13415             : 
   13416             : static const u16 SphereSensor_Def2All[] = { 0, 1, 2};
   13417             : static const u16 SphereSensor_In2All[] = { 0, 1, 2};
   13418             : static const u16 SphereSensor_Out2All[] = { 0, 1, 2, 3, 4, 5};
   13419             : 
   13420             : static u32 SphereSensor_get_field_count(GF_Node *node, u8 IndexMode)
   13421             : {
   13422         104 :         switch(IndexMode) {
   13423             :         case GF_SG_FIELD_CODING_IN:
   13424           0 :                 return 3;
   13425             :         case GF_SG_FIELD_CODING_DEF:
   13426           9 :                 return 3;
   13427             :         case GF_SG_FIELD_CODING_OUT:
   13428          36 :                 return 6;
   13429             :         case GF_SG_FIELD_CODING_DYN:
   13430           0 :                 return 0;
   13431             :         default:
   13432           7 :                 return 6;
   13433             :         }
   13434          52 : }
   13435             : 
   13436             : static GF_Err SphereSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13437             : {
   13438         128 :         switch(IndexMode) {
   13439             :         case GF_SG_FIELD_CODING_IN:
   13440           0 :                 *allField = SphereSensor_In2All[inField];
   13441           0 :                 return GF_OK;
   13442             :         case GF_SG_FIELD_CODING_DEF:
   13443           6 :                 *allField = SphereSensor_Def2All[inField];
   13444           6 :                 return GF_OK;
   13445             :         case GF_SG_FIELD_CODING_OUT:
   13446          58 :                 *allField = SphereSensor_Out2All[inField];
   13447          58 :                 return GF_OK;
   13448             :         default:
   13449           0 :                 return GF_BAD_PARAM;
   13450             :         }
   13451          64 : }
   13452             : static GF_Err SphereSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   13453             : {
   13454         214 :         switch (info->fieldIndex) {
   13455             :         case 0:
   13456          18 :                 info->name = "autoOffset";
   13457          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13458          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13459          18 :                 info->far_ptr = & ((M_SphereSensor *) node)->autoOffset;
   13460          18 :                 return GF_OK;
   13461             :         case 1:
   13462          18 :                 info->name = "enabled";
   13463          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13464          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13465          18 :                 info->far_ptr = & ((M_SphereSensor *) node)->enabled;
   13466          18 :                 return GF_OK;
   13467             :         case 2:
   13468          18 :                 info->name = "offset";
   13469          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13470          18 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   13471          18 :                 info->far_ptr = & ((M_SphereSensor *) node)->offset;
   13472          18 :                 return GF_OK;
   13473             :         case 3:
   13474          23 :                 info->name = "isActive";
   13475          23 :                 info->eventType = GF_SG_EVENT_OUT;
   13476          23 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13477          23 :                 info->far_ptr = & ((M_SphereSensor *) node)->isActive;
   13478          23 :                 return GF_OK;
   13479             :         case 4:
   13480          15 :                 info->name = "rotation_changed";
   13481          15 :                 info->eventType = GF_SG_EVENT_OUT;
   13482          15 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   13483          15 :                 info->far_ptr = & ((M_SphereSensor *) node)->rotation_changed;
   13484          15 :                 return GF_OK;
   13485             :         case 5:
   13486          15 :                 info->name = "trackPoint_changed";
   13487          15 :                 info->eventType = GF_SG_EVENT_OUT;
   13488          15 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13489          15 :                 info->far_ptr = & ((M_SphereSensor *) node)->trackPoint_changed;
   13490          15 :                 return GF_OK;
   13491             :         default:
   13492           0 :                 return GF_BAD_PARAM;
   13493             :         }
   13494         107 : }
   13495             : 
   13496             : 
   13497             : static s32 SphereSensor_get_field_index_by_name(char *name)
   13498             : {
   13499          32 :         if (!strcmp("autoOffset", name)) return 0;
   13500          16 :         if (!strcmp("enabled", name)) return 1;
   13501          16 :         if (!strcmp("offset", name)) return 2;
   13502          24 :         if (!strcmp("isActive", name)) return 3;
   13503          12 :         if (!strcmp("rotation_changed", name)) return 4;
   13504           8 :         if (!strcmp("trackPoint_changed", name)) return 5;
   13505           0 :         return -1;
   13506          16 : }
   13507             : static Bool SphereSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13508             : {
   13509           0 :         switch (FieldIndex) {
   13510             :         case 2:
   13511           0 :                 *AType = 0;
   13512           0 :                 *QType = 10;
   13513           0 :                 *b_min = FIX_MIN;
   13514           0 :                 *b_max = FIX_MAX;
   13515           0 :                 return 1;
   13516             :         default:
   13517           0 :                 return 0;
   13518             :         }
   13519           0 : }
   13520             : 
   13521             : 
   13522             : 
   13523             : GF_Node *SphereSensor_Create()
   13524             : {
   13525             :         M_SphereSensor *p;
   13526          54 :         GF_SAFEALLOC(p, M_SphereSensor);
   13527          18 :         if(!p) return NULL;
   13528          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SphereSensor);
   13529             : 
   13530             :         /*default field values*/
   13531          18 :         p->autoOffset = 1;
   13532          18 :         p->enabled = 1;
   13533          18 :         p->offset.x = FLT2FIX(0);
   13534          18 :         p->offset.y = FLT2FIX(1);
   13535          18 :         p->offset.z = FLT2FIX(0);
   13536          18 :         p->offset.q = FLT2FIX(0);
   13537          18 :         return (GF_Node *)p;
   13538          18 : }
   13539             : 
   13540             : 
   13541             : /*
   13542             :         SpotLight Node deletion
   13543             : */
   13544             : 
   13545             : static void SpotLight_Del(GF_Node *node)
   13546             : {
   13547          36 :         M_SpotLight *p = (M_SpotLight *) node;
   13548          18 :         gf_node_free((GF_Node *) p);
   13549          18 : }
   13550             : 
   13551             : static const u16 SpotLight_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   13552             : static const u16 SpotLight_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   13553             : static const u16 SpotLight_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   13554             : static const u16 SpotLight_Dyn2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 9};
   13555             : 
   13556             : static u32 SpotLight_get_field_count(GF_Node *node, u8 IndexMode)
   13557             : {
   13558          50 :         switch(IndexMode) {
   13559             :         case GF_SG_FIELD_CODING_IN:
   13560           9 :                 return 10;
   13561             :         case GF_SG_FIELD_CODING_DEF:
   13562           9 :                 return 10;
   13563             :         case GF_SG_FIELD_CODING_OUT:
   13564           0 :                 return 10;
   13565             :         case GF_SG_FIELD_CODING_DYN:
   13566           0 :                 return 9;
   13567             :         default:
   13568           7 :                 return 10;
   13569             :         }
   13570          25 : }
   13571             : 
   13572             : static GF_Err SpotLight_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13573             : {
   13574          94 :         switch(IndexMode) {
   13575             :         case GF_SG_FIELD_CODING_IN:
   13576          17 :                 *allField = SpotLight_In2All[inField];
   13577          17 :                 return GF_OK;
   13578             :         case GF_SG_FIELD_CODING_DEF:
   13579          30 :                 *allField = SpotLight_Def2All[inField];
   13580          30 :                 return GF_OK;
   13581             :         case GF_SG_FIELD_CODING_OUT:
   13582           0 :                 *allField = SpotLight_Out2All[inField];
   13583           0 :                 return GF_OK;
   13584             :         case GF_SG_FIELD_CODING_DYN:
   13585           0 :                 *allField = SpotLight_Dyn2All[inField];
   13586           0 :                 return GF_OK;
   13587             :         default:
   13588           0 :                 return GF_BAD_PARAM;
   13589             :         }
   13590          47 : }
   13591             : static GF_Err SpotLight_get_field(GF_Node *node, GF_FieldInfo *info)
   13592             : {
   13593         440 :         switch (info->fieldIndex) {
   13594             :         case 0:
   13595          18 :                 info->name = "ambientIntensity";
   13596          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13597          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13598          18 :                 info->far_ptr = & ((M_SpotLight *) node)->ambientIntensity;
   13599          18 :                 return GF_OK;
   13600             :         case 1:
   13601          18 :                 info->name = "attenuation";
   13602          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13603          18 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13604          18 :                 info->far_ptr = & ((M_SpotLight *) node)->attenuation;
   13605          18 :                 return GF_OK;
   13606             :         case 2:
   13607          18 :                 info->name = "beamWidth";
   13608          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13609          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13610          18 :                 info->far_ptr = & ((M_SpotLight *) node)->beamWidth;
   13611          18 :                 return GF_OK;
   13612             :         case 3:
   13613          33 :                 info->name = "color";
   13614          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13615          33 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   13616          33 :                 info->far_ptr = & ((M_SpotLight *) node)->color;
   13617          33 :                 return GF_OK;
   13618             :         case 4:
   13619          18 :                 info->name = "cutOffAngle";
   13620          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13621          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13622          18 :                 info->far_ptr = & ((M_SpotLight *) node)->cutOffAngle;
   13623          18 :                 return GF_OK;
   13624             :         case 5:
   13625          28 :                 info->name = "direction";
   13626          28 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13627          28 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13628          28 :                 info->far_ptr = & ((M_SpotLight *) node)->direction;
   13629          28 :                 return GF_OK;
   13630             :         case 6:
   13631          18 :                 info->name = "intensity";
   13632          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13633          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13634          18 :                 info->far_ptr = & ((M_SpotLight *) node)->intensity;
   13635          18 :                 return GF_OK;
   13636             :         case 7:
   13637          33 :                 info->name = "location";
   13638          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13639          33 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13640          33 :                 info->far_ptr = & ((M_SpotLight *) node)->location;
   13641          33 :                 return GF_OK;
   13642             :         case 8:
   13643          18 :                 info->name = "on";
   13644          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13645          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13646          18 :                 info->far_ptr = & ((M_SpotLight *) node)->on;
   13647          18 :                 return GF_OK;
   13648             :         case 9:
   13649          18 :                 info->name = "radius";
   13650          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13651          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13652          18 :                 info->far_ptr = & ((M_SpotLight *) node)->radius;
   13653          18 :                 return GF_OK;
   13654             :         default:
   13655           0 :                 return GF_BAD_PARAM;
   13656             :         }
   13657         220 : }
   13658             : 
   13659             : 
   13660             : static s32 SpotLight_get_field_index_by_name(char *name)
   13661             : {
   13662          28 :         if (!strcmp("ambientIntensity", name)) return 0;
   13663          14 :         if (!strcmp("attenuation", name)) return 1;
   13664          14 :         if (!strcmp("beamWidth", name)) return 2;
   13665          18 :         if (!strcmp("color", name)) return 3;
   13666          10 :         if (!strcmp("cutOffAngle", name)) return 4;
   13667          16 :         if (!strcmp("direction", name)) return 5;
   13668           4 :         if (!strcmp("intensity", name)) return 6;
   13669           8 :         if (!strcmp("location", name)) return 7;
   13670           0 :         if (!strcmp("on", name)) return 8;
   13671           0 :         if (!strcmp("radius", name)) return 9;
   13672           0 :         return -1;
   13673          14 : }
   13674             : static Bool SpotLight_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13675             : {
   13676           0 :         switch (FieldIndex) {
   13677             :         case 0:
   13678           0 :                 *AType = 8;
   13679           0 :                 *QType = 4;
   13680           0 :                 *b_min = FLT2FIX(0);
   13681           0 :                 *b_max = FLT2FIX(1);
   13682           0 :                 return 1;
   13683             :         case 1:
   13684           0 :                 *AType = 1;
   13685           0 :                 *QType = 11;
   13686           0 :                 *b_min = FLT2FIX(0);
   13687           0 :                 *b_max = FIX_MAX;
   13688           0 :                 return 1;
   13689             :         case 2:
   13690           0 :                 *AType = 8;
   13691           0 :                 *QType = 6;
   13692           0 :                 *b_min = FLT2FIX(0);
   13693           0 :                 *b_max = FLT2FIX(1.5707963);
   13694           0 :                 return 1;
   13695             :         case 3:
   13696           0 :                 *AType = 4;
   13697           0 :                 *QType = 4;
   13698           0 :                 *b_min = FLT2FIX(0);
   13699           0 :                 *b_max = FLT2FIX(1);
   13700           0 :                 return 1;
   13701             :         case 4:
   13702           0 :                 *AType = 8;
   13703           0 :                 *QType = 6;
   13704           0 :                 *b_min = FLT2FIX(0);
   13705           0 :                 *b_max = FLT2FIX(1.5707963);
   13706           0 :                 return 1;
   13707             :         case 5:
   13708           0 :                 *AType = 9;
   13709           0 :                 *QType = 9;
   13710           0 :                 *b_min = FIX_MIN;
   13711           0 :                 *b_max = FIX_MAX;
   13712           0 :                 return 1;
   13713             :         case 6:
   13714           0 :                 *AType = 8;
   13715           0 :                 *QType = 4;
   13716           0 :                 *b_min = FLT2FIX(0);
   13717           0 :                 *b_max = FLT2FIX(1);
   13718           0 :                 return 1;
   13719             :         case 7:
   13720           0 :                 *AType = 1;
   13721           0 :                 *QType = 1;
   13722           0 :                 *b_min = FIX_MIN;
   13723           0 :                 *b_max = FIX_MAX;
   13724           0 :                 return 1;
   13725             :         case 9:
   13726           0 :                 *AType = 7;
   13727           0 :                 *QType = 11;
   13728           0 :                 *b_min = FLT2FIX(0);
   13729           0 :                 *b_max = FIX_MAX;
   13730           0 :                 return 1;
   13731             :         default:
   13732           0 :                 return 0;
   13733             :         }
   13734           0 : }
   13735             : 
   13736             : 
   13737             : 
   13738             : GF_Node *SpotLight_Create()
   13739             : {
   13740             :         M_SpotLight *p;
   13741          54 :         GF_SAFEALLOC(p, M_SpotLight);
   13742          18 :         if(!p) return NULL;
   13743          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SpotLight);
   13744             : 
   13745             :         /*default field values*/
   13746          18 :         p->ambientIntensity = FLT2FIX(0);
   13747          18 :         p->attenuation.x = FLT2FIX(1);
   13748          18 :         p->attenuation.y = FLT2FIX(0);
   13749          18 :         p->attenuation.z = FLT2FIX(0);
   13750          18 :         p->beamWidth = FLT2FIX(1.570796);
   13751          18 :         p->color.red = FLT2FIX(1);
   13752          18 :         p->color.green = FLT2FIX(1);
   13753          18 :         p->color.blue = FLT2FIX(1);
   13754          18 :         p->cutOffAngle = FLT2FIX(0.785398);
   13755          18 :         p->direction.x = FLT2FIX(0);
   13756          18 :         p->direction.y = FLT2FIX(0);
   13757          18 :         p->direction.z = FLT2FIX(-1);
   13758          18 :         p->intensity = FLT2FIX(1);
   13759          18 :         p->location.x = FLT2FIX(0);
   13760          18 :         p->location.y = FLT2FIX(0);
   13761          18 :         p->location.z = FLT2FIX(0);
   13762          18 :         p->on = 1;
   13763          18 :         p->radius = FLT2FIX(100);
   13764          18 :         return (GF_Node *)p;
   13765          18 : }
   13766             : 
   13767             : 
   13768             : /*
   13769             :         Switch Node deletion
   13770             : */
   13771             : 
   13772             : static void Switch_Del(GF_Node *node)
   13773             : {
   13774        1088 :         M_Switch *p = (M_Switch *) node;
   13775         544 :         gf_node_unregister_children((GF_Node *) p, p->choice);
   13776         544 :         gf_node_free((GF_Node *) p);
   13777         544 : }
   13778             : 
   13779             : static const u16 Switch_Def2All[] = { 0, 1};
   13780             : static const u16 Switch_In2All[] = { 0, 1};
   13781             : static const u16 Switch_Out2All[] = { 0, 1};
   13782             : 
   13783             : static u32 Switch_get_field_count(GF_Node *node, u8 IndexMode)
   13784             : {
   13785        2290 :         switch(IndexMode) {
   13786             :         case GF_SG_FIELD_CODING_IN:
   13787         660 :                 return 2;
   13788             :         case GF_SG_FIELD_CODING_DEF:
   13789         223 :                 return 2;
   13790             :         case GF_SG_FIELD_CODING_OUT:
   13791           0 :                 return 2;
   13792             :         case GF_SG_FIELD_CODING_DYN:
   13793           0 :                 return 0;
   13794             :         default:
   13795         262 :                 return 2;
   13796             :         }
   13797        1145 : }
   13798             : 
   13799             : static GF_Err Switch_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13800             : {
   13801        1432 :         switch(IndexMode) {
   13802             :         case GF_SG_FIELD_CODING_IN:
   13803         403 :                 *allField = Switch_In2All[inField];
   13804         403 :                 return GF_OK;
   13805             :         case GF_SG_FIELD_CODING_DEF:
   13806         313 :                 *allField = Switch_Def2All[inField];
   13807         313 :                 return GF_OK;
   13808             :         case GF_SG_FIELD_CODING_OUT:
   13809           0 :                 *allField = Switch_Out2All[inField];
   13810           0 :                 return GF_OK;
   13811             :         default:
   13812           0 :                 return GF_BAD_PARAM;
   13813             :         }
   13814         716 : }
   13815             : static GF_Err Switch_get_field(GF_Node *node, GF_FieldInfo *info)
   13816             : {
   13817        4166 :         switch (info->fieldIndex) {
   13818             :         case 0:
   13819         946 :                 info->name = "choice";
   13820         946 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13821         946 :                 info->fieldType = GF_SG_VRML_MFNODE;
   13822         946 :                 info->NDTtype = NDT_SF3DNode;
   13823         946 :                 info->far_ptr = & ((M_Switch *)node)->choice;
   13824         946 :                 return GF_OK;
   13825             :         case 1:
   13826        1137 :                 info->name = "whichChoice";
   13827        1137 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13828        1137 :                 info->fieldType = GF_SG_VRML_SFINT32;
   13829        1137 :                 info->far_ptr = & ((M_Switch *) node)->whichChoice;
   13830        1137 :                 return GF_OK;
   13831             :         default:
   13832           0 :                 return GF_BAD_PARAM;
   13833             :         }
   13834        2083 : }
   13835             : 
   13836             : 
   13837             : static s32 Switch_get_field_index_by_name(char *name)
   13838             : {
   13839         619 :         if (!strcmp("choice", name)) return 0;
   13840         304 :         if (!strcmp("whichChoice", name)) return 1;
   13841           0 :         return -1;
   13842         257 : }
   13843             : static Bool Switch_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13844             : {
   13845           0 :         switch (FieldIndex) {
   13846             :         case 1:
   13847           0 :                 *AType = 0;
   13848           0 :                 *QType = 13;
   13849           0 :                 *QT13_bits = 10;
   13850           0 :                 *b_min = FLT2FIX(-1);
   13851           0 :                 *b_max = FLT2FIX( 1022);
   13852           0 :                 return 1;
   13853             :         default:
   13854           0 :                 return 0;
   13855             :         }
   13856           0 : }
   13857             : 
   13858             : 
   13859             : 
   13860             : GF_Node *Switch_Create()
   13861             : {
   13862             :         M_Switch *p;
   13863        1632 :         GF_SAFEALLOC(p, M_Switch);
   13864         544 :         if(!p) return NULL;
   13865         544 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Switch);
   13866             : 
   13867             :         /*default field values*/
   13868         544 :         p->whichChoice = -1;
   13869         544 :         return (GF_Node *)p;
   13870         544 : }
   13871             : 
   13872             : 
   13873             : /*
   13874             :         TermCap Node deletion
   13875             : */
   13876             : 
   13877             : static void TermCap_Del(GF_Node *node)
   13878             : {
   13879           0 :         M_TermCap *p = (M_TermCap *) node;
   13880           0 :         gf_node_free((GF_Node *) p);
   13881           0 : }
   13882             : 
   13883             : static const u16 TermCap_Def2All[] = { 1};
   13884             : static const u16 TermCap_In2All[] = { 0, 1};
   13885             : static const u16 TermCap_Out2All[] = { 1, 2};
   13886             : 
   13887             : static u32 TermCap_get_field_count(GF_Node *node, u8 IndexMode)
   13888             : {
   13889           0 :         switch(IndexMode) {
   13890             :         case GF_SG_FIELD_CODING_IN:
   13891           0 :                 return 2;
   13892             :         case GF_SG_FIELD_CODING_DEF:
   13893           0 :                 return 1;
   13894             :         case GF_SG_FIELD_CODING_OUT:
   13895           0 :                 return 2;
   13896             :         case GF_SG_FIELD_CODING_DYN:
   13897           0 :                 return 0;
   13898             :         default:
   13899           0 :                 return 3;
   13900             :         }
   13901           0 : }
   13902             : 
   13903             : static GF_Err TermCap_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13904             : {
   13905           0 :         switch(IndexMode) {
   13906             :         case GF_SG_FIELD_CODING_IN:
   13907           0 :                 *allField = TermCap_In2All[inField];
   13908           0 :                 return GF_OK;
   13909             :         case GF_SG_FIELD_CODING_DEF:
   13910           0 :                 *allField = TermCap_Def2All[inField];
   13911           0 :                 return GF_OK;
   13912             :         case GF_SG_FIELD_CODING_OUT:
   13913           0 :                 *allField = TermCap_Out2All[inField];
   13914           0 :                 return GF_OK;
   13915             :         default:
   13916           0 :                 return GF_BAD_PARAM;
   13917             :         }
   13918           0 : }
   13919             : static GF_Err TermCap_get_field(GF_Node *node, GF_FieldInfo *info)
   13920             : {
   13921           0 :         switch (info->fieldIndex) {
   13922             :         case 0:
   13923           0 :                 info->name = "evaluate";
   13924           0 :                 info->eventType = GF_SG_EVENT_IN;
   13925           0 :                 info->on_event_in = ((M_TermCap *)node)->on_evaluate;
   13926           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   13927           0 :                 info->far_ptr = & ((M_TermCap *) node)->evaluate;
   13928           0 :                 return GF_OK;
   13929             :         case 1:
   13930           0 :                 info->name = "capability";
   13931           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13932           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   13933           0 :                 info->far_ptr = & ((M_TermCap *) node)->capability;
   13934           0 :                 return GF_OK;
   13935             :         case 2:
   13936           0 :                 info->name = "value";
   13937           0 :                 info->eventType = GF_SG_EVENT_OUT;
   13938           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   13939           0 :                 info->far_ptr = & ((M_TermCap *) node)->value;
   13940           0 :                 return GF_OK;
   13941             :         default:
   13942           0 :                 return GF_BAD_PARAM;
   13943             :         }
   13944           0 : }
   13945             : 
   13946             : 
   13947             : static s32 TermCap_get_field_index_by_name(char *name)
   13948             : {
   13949           0 :         if (!strcmp("evaluate", name)) return 0;
   13950           0 :         if (!strcmp("capability", name)) return 1;
   13951           0 :         if (!strcmp("value", name)) return 2;
   13952           0 :         return -1;
   13953           0 : }
   13954             : static Bool TermCap_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13955             : {
   13956           0 :         switch (FieldIndex) {
   13957             :         case 1:
   13958           0 :                 *AType = 0;
   13959           0 :                 *QType = 13;
   13960           0 :                 *QT13_bits = 7;
   13961           0 :                 *b_min = FLT2FIX(0);
   13962           0 :                 *b_max = FLT2FIX(127);
   13963           0 :                 return 1;
   13964             :         case 2:
   13965           0 :                 *AType = 0;
   13966           0 :                 *QType = 13;
   13967           0 :                 *QT13_bits = 3;
   13968           0 :                 *b_min = FLT2FIX(0);
   13969           0 :                 *b_max = FLT2FIX(7);
   13970           0 :                 return 1;
   13971             :         default:
   13972           0 :                 return 0;
   13973             :         }
   13974           0 : }
   13975             : 
   13976             : 
   13977             : 
   13978             : GF_Node *TermCap_Create()
   13979             : {
   13980             :         M_TermCap *p;
   13981           0 :         GF_SAFEALLOC(p, M_TermCap);
   13982           0 :         if(!p) return NULL;
   13983           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TermCap);
   13984             : 
   13985             :         /*default field values*/
   13986           0 :         p->capability = 0;
   13987           0 :         return (GF_Node *)p;
   13988           0 : }
   13989             : 
   13990             : 
   13991             : /*
   13992             :         Text Node deletion
   13993             : */
   13994             : 
   13995             : static void Text_Del(GF_Node *node)
   13996             : {
   13997       25784 :         M_Text *p = (M_Text *) node;
   13998       12892 :         gf_sg_mfstring_del(p->string);
   13999       12892 :         gf_sg_mffloat_del(p->length);
   14000       12892 :         gf_node_unregister((GF_Node *) p->fontStyle, (GF_Node *) p);
   14001       12892 :         gf_node_free((GF_Node *) p);
   14002       12892 : }
   14003             : 
   14004             : static const u16 Text_Def2All[] = { 0, 1, 2, 3};
   14005             : static const u16 Text_In2All[] = { 0, 1, 2, 3};
   14006             : static const u16 Text_Out2All[] = { 0, 1, 2, 3};
   14007             : static const u16 Text_Dyn2All[] = { 1, 3};
   14008             : 
   14009             : static u32 Text_get_field_count(GF_Node *node, u8 IndexMode)
   14010             : {
   14011       24766 :         switch(IndexMode) {
   14012             :         case GF_SG_FIELD_CODING_IN:
   14013         876 :                 return 4;
   14014             :         case GF_SG_FIELD_CODING_DEF:
   14015        5988 :                 return 4;
   14016             :         case GF_SG_FIELD_CODING_OUT:
   14017           0 :                 return 4;
   14018             :         case GF_SG_FIELD_CODING_DYN:
   14019           0 :                 return 2;
   14020             :         default:
   14021        5519 :                 return 4;
   14022             :         }
   14023       12383 : }
   14024             : 
   14025             : static GF_Err Text_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14026             : {
   14027       25278 :         switch(IndexMode) {
   14028             :         case GF_SG_FIELD_CODING_IN:
   14029         676 :                 *allField = Text_In2All[inField];
   14030         676 :                 return GF_OK;
   14031             :         case GF_SG_FIELD_CODING_DEF:
   14032       11963 :                 *allField = Text_Def2All[inField];
   14033       11963 :                 return GF_OK;
   14034             :         case GF_SG_FIELD_CODING_OUT:
   14035           0 :                 *allField = Text_Out2All[inField];
   14036           0 :                 return GF_OK;
   14037             :         case GF_SG_FIELD_CODING_DYN:
   14038           0 :                 *allField = Text_Dyn2All[inField];
   14039           0 :                 return GF_OK;
   14040             :         default:
   14041           0 :                 return GF_BAD_PARAM;
   14042             :         }
   14043       12639 : }
   14044             : static GF_Err Text_get_field(GF_Node *node, GF_FieldInfo *info)
   14045             : {
   14046      138404 :         switch (info->fieldIndex) {
   14047             :         case 0:
   14048       24781 :                 info->name = "string";
   14049       24781 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14050       24781 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   14051       24781 :                 info->far_ptr = & ((M_Text *) node)->string;
   14052       24781 :                 return GF_OK;
   14053             :         case 1:
   14054       13752 :                 info->name = "length";
   14055       13752 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14056       13752 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   14057       13752 :                 info->far_ptr = & ((M_Text *) node)->length;
   14058       13752 :                 return GF_OK;
   14059             :         case 2:
   14060       16907 :                 info->name = "fontStyle";
   14061       16907 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14062       16907 :                 info->fieldType = GF_SG_VRML_SFNODE;
   14063       16907 :                 info->NDTtype = NDT_SFFontStyleNode;
   14064       16907 :                 info->far_ptr = & ((M_Text *)node)->fontStyle;
   14065       16907 :                 return GF_OK;
   14066             :         case 3:
   14067       13762 :                 info->name = "maxExtent";
   14068       13762 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14069       13762 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14070       13762 :                 info->far_ptr = & ((M_Text *) node)->maxExtent;
   14071       13762 :                 return GF_OK;
   14072             :         default:
   14073           0 :                 return GF_BAD_PARAM;
   14074             :         }
   14075       69202 : }
   14076             : 
   14077             : 
   14078             : static s32 Text_get_field_index_by_name(char *name)
   14079             : {
   14080       14687 :         if (!strcmp("string", name)) return 0;
   14081        2828 :         if (!strcmp("length", name)) return 1;
   14082        5544 :         if (!strcmp("fontStyle", name)) return 2;
   14083          96 :         if (!strcmp("maxExtent", name)) return 3;
   14084           0 :         return -1;
   14085        5833 : }
   14086             : static Bool Text_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14087             : {
   14088           0 :         switch (FieldIndex) {
   14089             :         case 1:
   14090           0 :                 *AType = 7;
   14091           0 :                 *QType = 11;
   14092           0 :                 *b_min = FLT2FIX(0);
   14093           0 :                 *b_max = FIX_MAX;
   14094           0 :                 return 1;
   14095             :         case 3:
   14096           0 :                 *AType = 7;
   14097           0 :                 *QType = 11;
   14098           0 :                 *b_min = FLT2FIX(0);
   14099           0 :                 *b_max = FIX_MAX;
   14100           0 :                 return 1;
   14101             :         default:
   14102           0 :                 return 0;
   14103             :         }
   14104           0 : }
   14105             : 
   14106             : 
   14107             : 
   14108             : GF_Node *Text_Create()
   14109             : {
   14110             :         M_Text *p;
   14111       38676 :         GF_SAFEALLOC(p, M_Text);
   14112       12892 :         if(!p) return NULL;
   14113       12892 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Text);
   14114             : 
   14115             :         /*default field values*/
   14116       12892 :         p->maxExtent = FLT2FIX(0.0);
   14117       12892 :         return (GF_Node *)p;
   14118       12892 : }
   14119             : 
   14120             : 
   14121             : /*
   14122             :         TextureCoordinate Node deletion
   14123             : */
   14124             : 
   14125             : static void TextureCoordinate_Del(GF_Node *node)
   14126             : {
   14127           0 :         M_TextureCoordinate *p = (M_TextureCoordinate *) node;
   14128           0 :         gf_sg_mfvec2f_del(p->point);
   14129           0 :         gf_node_free((GF_Node *) p);
   14130           0 : }
   14131             : 
   14132             : static const u16 TextureCoordinate_Def2All[] = { 0};
   14133             : static const u16 TextureCoordinate_In2All[] = { 0};
   14134             : static const u16 TextureCoordinate_Out2All[] = { 0};
   14135             : static const u16 TextureCoordinate_Dyn2All[] = { 0};
   14136             : 
   14137             : static u32 TextureCoordinate_get_field_count(GF_Node *node, u8 IndexMode)
   14138             : {
   14139           0 :         switch(IndexMode) {
   14140             :         case GF_SG_FIELD_CODING_IN:
   14141           0 :                 return 1;
   14142             :         case GF_SG_FIELD_CODING_DEF:
   14143           0 :                 return 1;
   14144             :         case GF_SG_FIELD_CODING_OUT:
   14145           0 :                 return 1;
   14146             :         case GF_SG_FIELD_CODING_DYN:
   14147           0 :                 return 1;
   14148             :         default:
   14149           0 :                 return 1;
   14150             :         }
   14151           0 : }
   14152             : 
   14153             : static GF_Err TextureCoordinate_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14154             : {
   14155           0 :         switch(IndexMode) {
   14156             :         case GF_SG_FIELD_CODING_IN:
   14157           0 :                 *allField = TextureCoordinate_In2All[inField];
   14158           0 :                 return GF_OK;
   14159             :         case GF_SG_FIELD_CODING_DEF:
   14160           0 :                 *allField = TextureCoordinate_Def2All[inField];
   14161           0 :                 return GF_OK;
   14162             :         case GF_SG_FIELD_CODING_OUT:
   14163           0 :                 *allField = TextureCoordinate_Out2All[inField];
   14164           0 :                 return GF_OK;
   14165             :         case GF_SG_FIELD_CODING_DYN:
   14166           0 :                 *allField = TextureCoordinate_Dyn2All[inField];
   14167           0 :                 return GF_OK;
   14168             :         default:
   14169           0 :                 return GF_BAD_PARAM;
   14170             :         }
   14171           0 : }
   14172             : static GF_Err TextureCoordinate_get_field(GF_Node *node, GF_FieldInfo *info)
   14173             : {
   14174           0 :         switch (info->fieldIndex) {
   14175             :         case 0:
   14176           0 :                 info->name = "point";
   14177           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14178           0 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   14179           0 :                 info->far_ptr = & ((M_TextureCoordinate *) node)->point;
   14180           0 :                 return GF_OK;
   14181             :         default:
   14182           0 :                 return GF_BAD_PARAM;
   14183             :         }
   14184           0 : }
   14185             : 
   14186             : 
   14187             : static s32 TextureCoordinate_get_field_index_by_name(char *name)
   14188             : {
   14189           0 :         if (!strcmp("point", name)) return 0;
   14190           0 :         return -1;
   14191           0 : }
   14192             : static Bool TextureCoordinate_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14193             : {
   14194           0 :         switch (FieldIndex) {
   14195             :         case 0:
   14196           0 :                 *AType = 2;
   14197           0 :                 *QType = 5;
   14198           0 :                 *b_min = FIX_MIN;
   14199           0 :                 *b_max = FIX_MAX;
   14200           0 :                 return 1;
   14201             :         default:
   14202           0 :                 return 0;
   14203             :         }
   14204           0 : }
   14205             : 
   14206             : 
   14207             : 
   14208             : GF_Node *TextureCoordinate_Create()
   14209             : {
   14210             :         M_TextureCoordinate *p;
   14211           0 :         GF_SAFEALLOC(p, M_TextureCoordinate);
   14212           0 :         if(!p) return NULL;
   14213           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TextureCoordinate);
   14214             : 
   14215             :         /*default field values*/
   14216           0 :         return (GF_Node *)p;
   14217           0 : }
   14218             : 
   14219             : 
   14220             : /*
   14221             :         TextureTransform Node deletion
   14222             : */
   14223             : 
   14224             : static void TextureTransform_Del(GF_Node *node)
   14225             : {
   14226         468 :         M_TextureTransform *p = (M_TextureTransform *) node;
   14227         234 :         gf_node_free((GF_Node *) p);
   14228         234 : }
   14229             : 
   14230             : static const u16 TextureTransform_Def2All[] = { 0, 1, 2, 3};
   14231             : static const u16 TextureTransform_In2All[] = { 0, 1, 2, 3};
   14232             : static const u16 TextureTransform_Out2All[] = { 0, 1, 2, 3};
   14233             : static const u16 TextureTransform_Dyn2All[] = { 0, 1, 2, 3};
   14234             : 
   14235             : static u32 TextureTransform_get_field_count(GF_Node *node, u8 IndexMode)
   14236             : {
   14237         524 :         switch(IndexMode) {
   14238             :         case GF_SG_FIELD_CODING_IN:
   14239          54 :                 return 4;
   14240             :         case GF_SG_FIELD_CODING_DEF:
   14241         117 :                 return 4;
   14242             :         case GF_SG_FIELD_CODING_OUT:
   14243           0 :                 return 4;
   14244             :         case GF_SG_FIELD_CODING_DYN:
   14245           0 :                 return 4;
   14246             :         default:
   14247          91 :                 return 4;
   14248             :         }
   14249         262 : }
   14250             : 
   14251             : static GF_Err TextureTransform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14252             : {
   14253         468 :         switch(IndexMode) {
   14254             :         case GF_SG_FIELD_CODING_IN:
   14255          60 :                 *allField = TextureTransform_In2All[inField];
   14256          60 :                 return GF_OK;
   14257             :         case GF_SG_FIELD_CODING_DEF:
   14258         174 :                 *allField = TextureTransform_Def2All[inField];
   14259         174 :                 return GF_OK;
   14260             :         case GF_SG_FIELD_CODING_OUT:
   14261           0 :                 *allField = TextureTransform_Out2All[inField];
   14262           0 :                 return GF_OK;
   14263             :         case GF_SG_FIELD_CODING_DYN:
   14264           0 :                 *allField = TextureTransform_Dyn2All[inField];
   14265           0 :                 return GF_OK;
   14266             :         default:
   14267           0 :                 return GF_BAD_PARAM;
   14268             :         }
   14269         234 : }
   14270             : static GF_Err TextureTransform_get_field(GF_Node *node, GF_FieldInfo *info)
   14271             : {
   14272        2388 :         switch (info->fieldIndex) {
   14273             :         case 0:
   14274         287 :                 info->name = "center";
   14275         287 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14276         287 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14277         287 :                 info->far_ptr = & ((M_TextureTransform *) node)->center;
   14278         287 :                 return GF_OK;
   14279             :         case 1:
   14280         310 :                 info->name = "rotation";
   14281         310 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14282         310 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14283         310 :                 info->far_ptr = & ((M_TextureTransform *) node)->rotation;
   14284         310 :                 return GF_OK;
   14285             :         case 2:
   14286         325 :                 info->name = "scale";
   14287         325 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14288         325 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14289         325 :                 info->far_ptr = & ((M_TextureTransform *) node)->scale;
   14290         325 :                 return GF_OK;
   14291             :         case 3:
   14292         272 :                 info->name = "translation";
   14293         272 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14294         272 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14295         272 :                 info->far_ptr = & ((M_TextureTransform *) node)->translation;
   14296         272 :                 return GF_OK;
   14297             :         default:
   14298           0 :                 return GF_BAD_PARAM;
   14299             :         }
   14300        1194 : }
   14301             : 
   14302             : 
   14303             : static s32 TextureTransform_get_field_index_by_name(char *name)
   14304             : {
   14305         176 :         if (!strcmp("center", name)) return 0;
   14306          88 :         if (!strcmp("rotation", name)) return 1;
   14307          68 :         if (!strcmp("scale", name)) return 2;
   14308          24 :         if (!strcmp("translation", name)) return 3;
   14309           0 :         return -1;
   14310          80 : }
   14311             : static Bool TextureTransform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14312             : {
   14313           0 :         switch (FieldIndex) {
   14314             :         case 0:
   14315           0 :                 *AType = 2;
   14316           0 :                 *QType = 2;
   14317           0 :                 *b_min = FIX_MIN;
   14318           0 :                 *b_max = FIX_MAX;
   14319           0 :                 return 1;
   14320             :         case 1:
   14321           0 :                 *AType = 6;
   14322           0 :                 *QType = 6;
   14323           0 :                 *b_min = FLT2FIX(0);
   14324           0 :                 *b_max = FLT2FIX(6.2831853);
   14325           0 :                 return 1;
   14326             :         case 2:
   14327           0 :                 *AType = 12;
   14328           0 :                 *QType = 7;
   14329           0 :                 *b_min = FIX_MIN;
   14330           0 :                 *b_max = FIX_MAX;
   14331           0 :                 return 1;
   14332             :         case 3:
   14333           0 :                 *AType = 2;
   14334           0 :                 *QType = 2;
   14335           0 :                 *b_min = FIX_MIN;
   14336           0 :                 *b_max = FIX_MAX;
   14337           0 :                 return 1;
   14338             :         default:
   14339           0 :                 return 0;
   14340             :         }
   14341           0 : }
   14342             : 
   14343             : 
   14344             : 
   14345             : GF_Node *TextureTransform_Create()
   14346             : {
   14347             :         M_TextureTransform *p;
   14348         702 :         GF_SAFEALLOC(p, M_TextureTransform);
   14349         234 :         if(!p) return NULL;
   14350         234 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TextureTransform);
   14351             : 
   14352             :         /*default field values*/
   14353         234 :         p->center.x = FLT2FIX(0);
   14354         234 :         p->center.y = FLT2FIX(0);
   14355         234 :         p->rotation = FLT2FIX(0);
   14356         234 :         p->scale.x = FLT2FIX(1);
   14357         234 :         p->scale.y = FLT2FIX(1);
   14358         234 :         p->translation.x = FLT2FIX(0);
   14359         234 :         p->translation.y = FLT2FIX(0);
   14360         234 :         return (GF_Node *)p;
   14361         234 : }
   14362             : 
   14363             : 
   14364             : /*
   14365             :         TimeSensor Node deletion
   14366             : */
   14367             : 
   14368             : static void TimeSensor_Del(GF_Node *node)
   14369             : {
   14370        3734 :         M_TimeSensor *p = (M_TimeSensor *) node;
   14371        1867 :         gf_node_free((GF_Node *) p);
   14372        1867 : }
   14373             : 
   14374             : static const u16 TimeSensor_Def2All[] = { 0, 1, 2, 3, 4};
   14375             : static const u16 TimeSensor_In2All[] = { 0, 1, 2, 3, 4};
   14376             : static const u16 TimeSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   14377             : 
   14378             : static u32 TimeSensor_get_field_count(GF_Node *node, u8 IndexMode)
   14379             : {
   14380        6296 :         switch(IndexMode) {
   14381             :         case GF_SG_FIELD_CODING_IN:
   14382         243 :                 return 5;
   14383             :         case GF_SG_FIELD_CODING_DEF:
   14384         913 :                 return 5;
   14385             :         case GF_SG_FIELD_CODING_OUT:
   14386        1226 :                 return 9;
   14387             :         case GF_SG_FIELD_CODING_DYN:
   14388           0 :                 return 0;
   14389             :         default:
   14390         766 :                 return 9;
   14391             :         }
   14392        3148 : }
   14393             : 
   14394             : static GF_Err TimeSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14395             : {
   14396        9726 :         switch(IndexMode) {
   14397             :         case GF_SG_FIELD_CODING_IN:
   14398         317 :                 *allField = TimeSensor_In2All[inField];
   14399         317 :                 return GF_OK;
   14400             :         case GF_SG_FIELD_CODING_DEF:
   14401        1969 :                 *allField = TimeSensor_Def2All[inField];
   14402        1969 :                 return GF_OK;
   14403             :         case GF_SG_FIELD_CODING_OUT:
   14404        2577 :                 *allField = TimeSensor_Out2All[inField];
   14405        2577 :                 return GF_OK;
   14406             :         default:
   14407           0 :                 return GF_BAD_PARAM;
   14408             :         }
   14409        4863 : }
   14410             : static GF_Err TimeSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   14411             : {
   14412       33402 :         switch (info->fieldIndex) {
   14413             :         case 0:
   14414        3174 :                 info->name = "cycleInterval";
   14415        3174 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14416        3174 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14417        3174 :                 info->far_ptr = & ((M_TimeSensor *) node)->cycleInterval;
   14418        3174 :                 return GF_OK;
   14419             :         case 1:
   14420        2124 :                 info->name = "enabled";
   14421        2124 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14422        2124 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14423        2124 :                 info->far_ptr = & ((M_TimeSensor *) node)->enabled;
   14424        2124 :                 return GF_OK;
   14425             :         case 2:
   14426        3186 :                 info->name = "loop";
   14427        3186 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14428        3186 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14429        3186 :                 info->far_ptr = & ((M_TimeSensor *) node)->loop;
   14430        3186 :                 return GF_OK;
   14431             :         case 3:
   14432        2232 :                 info->name = "startTime";
   14433        2232 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14434        2232 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14435        2232 :                 info->far_ptr = & ((M_TimeSensor *) node)->startTime;
   14436        2232 :                 return GF_OK;
   14437             :         case 4:
   14438        1944 :                 info->name = "stopTime";
   14439        1944 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14440        1944 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14441        1944 :                 info->far_ptr = & ((M_TimeSensor *) node)->stopTime;
   14442        1944 :                 return GF_OK;
   14443             :         case 5:
   14444         822 :                 info->name = "cycleTime";
   14445         822 :                 info->eventType = GF_SG_EVENT_OUT;
   14446         822 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14447         822 :                 info->far_ptr = & ((M_TimeSensor *) node)->cycleTime;
   14448         822 :                 return GF_OK;
   14449             :         case 6:
   14450        1707 :                 info->name = "fraction_changed";
   14451        1707 :                 info->eventType = GF_SG_EVENT_OUT;
   14452        1707 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14453        1707 :                 info->far_ptr = & ((M_TimeSensor *) node)->fraction_changed;
   14454        1707 :                 return GF_OK;
   14455             :         case 7:
   14456         774 :                 info->name = "isActive";
   14457         774 :                 info->eventType = GF_SG_EVENT_OUT;
   14458         774 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14459         774 :                 info->far_ptr = & ((M_TimeSensor *) node)->isActive;
   14460         774 :                 return GF_OK;
   14461             :         case 8:
   14462         738 :                 info->name = "time";
   14463         738 :                 info->eventType = GF_SG_EVENT_OUT;
   14464         738 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14465         738 :                 info->far_ptr = & ((M_TimeSensor *) node)->time;
   14466         738 :                 return GF_OK;
   14467             :         default:
   14468           0 :                 return GF_BAD_PARAM;
   14469             :         }
   14470       16701 : }
   14471             : 
   14472             : 
   14473             : static s32 TimeSensor_get_field_index_by_name(char *name)
   14474             : {
   14475        3762 :         if (!strcmp("cycleInterval", name)) return 0;
   14476        1430 :         if (!strcmp("enabled", name)) return 1;
   14477        1634 :         if (!strcmp("loop", name)) return 2;
   14478        1016 :         if (!strcmp("startTime", name)) return 3;
   14479         828 :         if (!strcmp("stopTime", name)) return 4;
   14480         810 :         if (!strcmp("cycleTime", name)) return 5;
   14481        1208 :         if (!strcmp("fraction_changed", name)) return 6;
   14482         250 :         if (!strcmp("isActive", name)) return 7;
   14483         210 :         if (!strcmp("time", name)) return 8;
   14484         202 :         return -1;
   14485        1704 : }
   14486             : static Bool TimeSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14487             : {
   14488             :         switch (FieldIndex) {
   14489             :         default:
   14490           0 :                 return 0;
   14491             :         }
   14492             : }
   14493             : 
   14494             : 
   14495             : 
   14496             : GF_Node *TimeSensor_Create()
   14497             : {
   14498             :         M_TimeSensor *p;
   14499        5601 :         GF_SAFEALLOC(p, M_TimeSensor);
   14500        1867 :         if(!p) return NULL;
   14501        1867 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TimeSensor);
   14502             : 
   14503             :         /*default field values*/
   14504        1867 :         p->cycleInterval = 1;
   14505        1867 :         p->enabled = 1;
   14506        1867 :         p->startTime = 0;
   14507        1867 :         p->stopTime = 0;
   14508        1867 :         return (GF_Node *)p;
   14509        1867 : }
   14510             : 
   14511             : 
   14512             : /*
   14513             :         TouchSensor Node deletion
   14514             : */
   14515             : 
   14516             : static void TouchSensor_Del(GF_Node *node)
   14517             : {
   14518       11914 :         M_TouchSensor *p = (M_TouchSensor *) node;
   14519        5957 :         gf_node_free((GF_Node *) p);
   14520        5957 : }
   14521             : 
   14522             : static const u16 TouchSensor_Def2All[] = { 0};
   14523             : static const u16 TouchSensor_In2All[] = { 0};
   14524             : static const u16 TouchSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   14525             : 
   14526             : static u32 TouchSensor_get_field_count(GF_Node *node, u8 IndexMode)
   14527             : {
   14528       20136 :         switch(IndexMode) {
   14529             :         case GF_SG_FIELD_CODING_IN:
   14530           0 :                 return 1;
   14531             :         case GF_SG_FIELD_CODING_DEF:
   14532        2703 :                 return 1;
   14533             :         case GF_SG_FIELD_CODING_OUT:
   14534        4707 :                 return 7;
   14535             :         case GF_SG_FIELD_CODING_DYN:
   14536           0 :                 return 0;
   14537             :         default:
   14538        2658 :                 return 7;
   14539             :         }
   14540       10068 : }
   14541             : 
   14542             : static GF_Err TouchSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14543             : {
   14544       17670 :         switch(IndexMode) {
   14545             :         case GF_SG_FIELD_CODING_IN:
   14546           0 :                 *allField = TouchSensor_In2All[inField];
   14547           0 :                 return GF_OK;
   14548             :         case GF_SG_FIELD_CODING_DEF:
   14549         594 :                 *allField = TouchSensor_Def2All[inField];
   14550         594 :                 return GF_OK;
   14551             :         case GF_SG_FIELD_CODING_OUT:
   14552        8241 :                 *allField = TouchSensor_Out2All[inField];
   14553        8241 :                 return GF_OK;
   14554             :         default:
   14555           0 :                 return GF_BAD_PARAM;
   14556             :         }
   14557        8835 : }
   14558             : static GF_Err TouchSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   14559             : {
   14560       52900 :         switch (info->fieldIndex) {
   14561             :         case 0:
   14562        6420 :                 info->name = "enabled";
   14563        6420 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14564        6420 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14565        6420 :                 info->far_ptr = & ((M_TouchSensor *) node)->enabled;
   14566        6420 :                 return GF_OK;
   14567             :         case 1:
   14568        2616 :                 info->name = "hitNormal_changed";
   14569        2616 :                 info->eventType = GF_SG_EVENT_OUT;
   14570        2616 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14571        2616 :                 info->far_ptr = & ((M_TouchSensor *) node)->hitNormal_changed;
   14572        2616 :                 return GF_OK;
   14573             :         case 2:
   14574        2696 :                 info->name = "hitPoint_changed";
   14575        2696 :                 info->eventType = GF_SG_EVENT_OUT;
   14576        2696 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14577        2696 :                 info->far_ptr = & ((M_TouchSensor *) node)->hitPoint_changed;
   14578        2696 :                 return GF_OK;
   14579             :         case 3:
   14580        2616 :                 info->name = "hitTexCoord_changed";
   14581        2616 :                 info->eventType = GF_SG_EVENT_OUT;
   14582        2616 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14583        2616 :                 info->far_ptr = & ((M_TouchSensor *) node)->hitTexCoord_changed;
   14584        2616 :                 return GF_OK;
   14585             :         case 4:
   14586        5158 :                 info->name = "isActive";
   14587        5158 :                 info->eventType = GF_SG_EVENT_OUT;
   14588        5158 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14589        5158 :                 info->far_ptr = & ((M_TouchSensor *) node)->isActive;
   14590        5158 :                 return GF_OK;
   14591             :         case 5:
   14592        4280 :                 info->name = "isOver";
   14593        4280 :                 info->eventType = GF_SG_EVENT_OUT;
   14594        4280 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14595        4280 :                 info->far_ptr = & ((M_TouchSensor *) node)->isOver;
   14596        4280 :                 return GF_OK;
   14597             :         case 6:
   14598        2664 :                 info->name = "touchTime";
   14599        2664 :                 info->eventType = GF_SG_EVENT_OUT;
   14600        2664 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14601        2664 :                 info->far_ptr = & ((M_TouchSensor *) node)->touchTime;
   14602        2664 :                 return GF_OK;
   14603             :         default:
   14604           0 :                 return GF_BAD_PARAM;
   14605             :         }
   14606       26450 : }
   14607             : 
   14608             : 
   14609             : static s32 TouchSensor_get_field_index_by_name(char *name)
   14610             : {
   14611        4320 :         if (!strcmp("enabled", name)) return 0;
   14612        2160 :         if (!strcmp("hitNormal_changed", name)) return 1;
   14613        2200 :         if (!strcmp("hitPoint_changed", name)) return 2;
   14614        2120 :         if (!strcmp("hitTexCoord_changed", name)) return 3;
   14615        3396 :         if (!strcmp("isActive", name)) return 4;
   14616        1664 :         if (!strcmp("isOver", name)) return 5;
   14617          48 :         if (!strcmp("touchTime", name)) return 6;
   14618           0 :         return -1;
   14619        2160 : }
   14620             : static Bool TouchSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14621             : {
   14622             :         switch (FieldIndex) {
   14623             :         default:
   14624           0 :                 return 0;
   14625             :         }
   14626             : }
   14627             : 
   14628             : 
   14629             : 
   14630             : GF_Node *TouchSensor_Create()
   14631             : {
   14632             :         M_TouchSensor *p;
   14633       17871 :         GF_SAFEALLOC(p, M_TouchSensor);
   14634        5957 :         if(!p) return NULL;
   14635        5957 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TouchSensor);
   14636             : 
   14637             :         /*default field values*/
   14638        5957 :         p->enabled = 1;
   14639        5957 :         return (GF_Node *)p;
   14640        5957 : }
   14641             : 
   14642             : 
   14643             : /*
   14644             :         Transform Node deletion
   14645             : */
   14646             : 
   14647             : static void Transform_Del(GF_Node *node)
   14648             : {
   14649        4942 :         M_Transform *p = (M_Transform *) node;
   14650        2471 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   14651        2471 :         gf_node_free((GF_Node *) p);
   14652        2471 : }
   14653             : 
   14654             : static const u16 Transform_Def2All[] = { 2, 3, 4, 5, 6, 7};
   14655             : static const u16 Transform_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   14656             : static const u16 Transform_Out2All[] = { 2, 3, 4, 5, 6, 7};
   14657             : static const u16 Transform_Dyn2All[] = { 2, 4, 5, 6, 7};
   14658             : 
   14659             : static u32 Transform_get_field_count(GF_Node *node, u8 IndexMode)
   14660             : {
   14661        4776 :         switch(IndexMode) {
   14662             :         case GF_SG_FIELD_CODING_IN:
   14663         225 :                 return 8;
   14664             :         case GF_SG_FIELD_CODING_DEF:
   14665        1152 :                 return 6;
   14666             :         case GF_SG_FIELD_CODING_OUT:
   14667           0 :                 return 6;
   14668             :         case GF_SG_FIELD_CODING_DYN:
   14669           0 :                 return 5;
   14670             :         default:
   14671        1011 :                 return 8;
   14672             :         }
   14673        2388 : }
   14674             : 
   14675             : static GF_Err Transform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14676             : {
   14677        6492 :         switch(IndexMode) {
   14678             :         case GF_SG_FIELD_CODING_IN:
   14679         405 :                 *allField = Transform_In2All[inField];
   14680         405 :                 return GF_OK;
   14681             :         case GF_SG_FIELD_CODING_DEF:
   14682        2841 :                 *allField = Transform_Def2All[inField];
   14683        2841 :                 return GF_OK;
   14684             :         case GF_SG_FIELD_CODING_OUT:
   14685           0 :                 *allField = Transform_Out2All[inField];
   14686           0 :                 return GF_OK;
   14687             :         case GF_SG_FIELD_CODING_DYN:
   14688           0 :                 *allField = Transform_Dyn2All[inField];
   14689           0 :                 return GF_OK;
   14690             :         default:
   14691           0 :                 return GF_BAD_PARAM;
   14692             :         }
   14693        3246 : }
   14694             : static GF_Err Transform_get_field(GF_Node *node, GF_FieldInfo *info)
   14695             : {
   14696       40152 :         switch (info->fieldIndex) {
   14697             :         case 0:
   14698        1011 :                 info->name = "addChildren";
   14699        1011 :                 info->eventType = GF_SG_EVENT_IN;
   14700        1011 :                 info->on_event_in = ((M_Transform *)node)->on_addChildren;
   14701        1011 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14702        1011 :                 info->NDTtype = NDT_SF3DNode;
   14703        1011 :                 info->far_ptr = & ((M_Transform *)node)->addChildren;
   14704        1011 :                 return GF_OK;
   14705             :         case 1:
   14706        1011 :                 info->name = "removeChildren";
   14707        1011 :                 info->eventType = GF_SG_EVENT_IN;
   14708        1011 :                 info->on_event_in = ((M_Transform *)node)->on_removeChildren;
   14709        1011 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14710        1011 :                 info->NDTtype = NDT_SF3DNode;
   14711        1011 :                 info->far_ptr = & ((M_Transform *)node)->removeChildren;
   14712        1011 :                 return GF_OK;
   14713             :         case 2:
   14714        2534 :                 info->name = "center";
   14715        2534 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14716        2534 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14717        2534 :                 info->far_ptr = & ((M_Transform *) node)->center;
   14718        2534 :                 return GF_OK;
   14719             :         case 3:
   14720        3187 :                 info->name = "children";
   14721        3187 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14722        3187 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14723        3187 :                 info->NDTtype = NDT_SF3DNode;
   14724        3187 :                 info->far_ptr = & ((M_Transform *)node)->children;
   14725        3187 :                 return GF_OK;
   14726             :         case 4:
   14727        3038 :                 info->name = "rotation";
   14728        3038 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14729        3038 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   14730        3038 :                 info->far_ptr = & ((M_Transform *) node)->rotation;
   14731        3038 :                 return GF_OK;
   14732             :         case 5:
   14733        2633 :                 info->name = "scale";
   14734        2633 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14735        2633 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14736        2633 :                 info->far_ptr = & ((M_Transform *) node)->scale;
   14737        2633 :                 return GF_OK;
   14738             :         case 6:
   14739        2549 :                 info->name = "scaleOrientation";
   14740        2549 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14741        2549 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   14742        2549 :                 info->far_ptr = & ((M_Transform *) node)->scaleOrientation;
   14743        2549 :                 return GF_OK;
   14744             :         case 7:
   14745        4113 :                 info->name = "translation";
   14746        4113 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14747        4113 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14748        4113 :                 info->far_ptr = & ((M_Transform *) node)->translation;
   14749        4113 :                 return GF_OK;
   14750             :         default:
   14751           0 :                 return GF_BAD_PARAM;
   14752             :         }
   14753       20076 : }
   14754             : 
   14755             : 
   14756             : static s32 Transform_get_field_index_by_name(char *name)
   14757             : {
   14758        2292 :         if (!strcmp("addChildren", name)) return 0;
   14759        1146 :         if (!strcmp("removeChildren", name)) return 1;
   14760        1146 :         if (!strcmp("center", name)) return 2;
   14761        1658 :         if (!strcmp("children", name)) return 3;
   14762         802 :         if (!strcmp("rotation", name)) return 4;
   14763         498 :         if (!strcmp("scale", name)) return 5;
   14764         438 :         if (!strcmp("scaleOrientation", name)) return 6;
   14765         860 :         if (!strcmp("translation", name)) return 7;
   14766           0 :         return -1;
   14767        1146 : }
   14768             : static Bool Transform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14769             : {
   14770           0 :         switch (FieldIndex) {
   14771             :         case 2:
   14772           0 :                 *AType = 1;
   14773           0 :                 *QType = 1;
   14774           0 :                 *b_min = FIX_MIN;
   14775           0 :                 *b_max = FIX_MAX;
   14776           0 :                 return 1;
   14777             :         case 4:
   14778           0 :                 *AType = 10;
   14779           0 :                 *QType = 10;
   14780           0 :                 return 1;
   14781             :         case 5:
   14782           0 :                 *AType = 11;
   14783           0 :                 *QType = 7;
   14784           0 :                 *b_min = FLT2FIX(0);
   14785           0 :                 *b_max = FIX_MAX;
   14786           0 :                 return 1;
   14787             :         case 6:
   14788           0 :                 *AType = 10;
   14789           0 :                 *QType = 10;
   14790           0 :                 return 1;
   14791             :         case 7:
   14792           0 :                 *AType = 1;
   14793           0 :                 *QType = 1;
   14794           0 :                 *b_min = FIX_MIN;
   14795           0 :                 *b_max = FIX_MAX;
   14796           0 :                 return 1;
   14797             :         default:
   14798           0 :                 return 0;
   14799             :         }
   14800           0 : }
   14801             : 
   14802             : 
   14803             : 
   14804             : GF_Node *Transform_Create()
   14805             : {
   14806             :         M_Transform *p;
   14807        7413 :         GF_SAFEALLOC(p, M_Transform);
   14808        2471 :         if(!p) return NULL;
   14809        2471 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Transform);
   14810        2471 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   14811             : 
   14812             :         /*default field values*/
   14813        2471 :         p->center.x = FLT2FIX(0);
   14814        2471 :         p->center.y = FLT2FIX(0);
   14815        2471 :         p->center.z = FLT2FIX(0);
   14816        2471 :         p->rotation.x = FLT2FIX(0);
   14817        2471 :         p->rotation.y = FLT2FIX(0);
   14818        2471 :         p->rotation.z = FLT2FIX(1);
   14819        2471 :         p->rotation.q = FLT2FIX(0);
   14820        2471 :         p->scale.x = FLT2FIX(1);
   14821        2471 :         p->scale.y = FLT2FIX(1);
   14822        2471 :         p->scale.z = FLT2FIX(1);
   14823        2471 :         p->scaleOrientation.x = FLT2FIX(0);
   14824        2471 :         p->scaleOrientation.y = FLT2FIX(0);
   14825        2471 :         p->scaleOrientation.z = FLT2FIX(1);
   14826        2471 :         p->scaleOrientation.q = FLT2FIX(0);
   14827        2471 :         p->translation.x = FLT2FIX(0);
   14828        2471 :         p->translation.y = FLT2FIX(0);
   14829        2471 :         p->translation.z = FLT2FIX(0);
   14830        2471 :         return (GF_Node *)p;
   14831        2471 : }
   14832             : 
   14833             : 
   14834             : /*
   14835             :         Transform2D Node deletion
   14836             : */
   14837             : 
   14838             : static void Transform2D_Del(GF_Node *node)
   14839             : {
   14840       58362 :         M_Transform2D *p = (M_Transform2D *) node;
   14841       29181 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   14842       29181 :         gf_node_free((GF_Node *) p);
   14843       29181 : }
   14844             : 
   14845             : static const u16 Transform2D_Def2All[] = { 2, 3, 4, 5, 6, 7};
   14846             : static const u16 Transform2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   14847             : static const u16 Transform2D_Out2All[] = { 2, 3, 4, 5, 6, 7};
   14848             : static const u16 Transform2D_Dyn2All[] = { 3, 4, 5, 6, 7};
   14849             : 
   14850             : static u32 Transform2D_get_field_count(GF_Node *node, u8 IndexMode)
   14851             : {
   14852       57216 :         switch(IndexMode) {
   14853             :         case GF_SG_FIELD_CODING_IN:
   14854        2651 :                 return 8;
   14855             :         case GF_SG_FIELD_CODING_DEF:
   14856       13328 :                 return 6;
   14857             :         case GF_SG_FIELD_CODING_OUT:
   14858          36 :                 return 6;
   14859             :         case GF_SG_FIELD_CODING_DYN:
   14860           0 :                 return 5;
   14861             :         default:
   14862       12593 :                 return 8;
   14863             :         }
   14864       28608 : }
   14865             : 
   14866             : static GF_Err Transform2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14867             : {
   14868       70670 :         switch(IndexMode) {
   14869             :         case GF_SG_FIELD_CODING_IN:
   14870        4384 :                 *allField = Transform2D_In2All[inField];
   14871        4384 :                 return GF_OK;
   14872             :         case GF_SG_FIELD_CODING_DEF:
   14873       30923 :                 *allField = Transform2D_Def2All[inField];
   14874       30923 :                 return GF_OK;
   14875             :         case GF_SG_FIELD_CODING_OUT:
   14876          28 :                 *allField = Transform2D_Out2All[inField];
   14877          28 :                 return GF_OK;
   14878             :         case GF_SG_FIELD_CODING_DYN:
   14879           0 :                 *allField = Transform2D_Dyn2All[inField];
   14880           0 :                 return GF_OK;
   14881             :         default:
   14882           0 :                 return GF_BAD_PARAM;
   14883             :         }
   14884       35335 : }
   14885             : static GF_Err Transform2D_get_field(GF_Node *node, GF_FieldInfo *info)
   14886             : {
   14887      473302 :         switch (info->fieldIndex) {
   14888             :         case 0:
   14889       12264 :                 info->name = "addChildren";
   14890       12264 :                 info->eventType = GF_SG_EVENT_IN;
   14891       12264 :                 info->on_event_in = ((M_Transform2D *)node)->on_addChildren;
   14892       12264 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14893       12264 :                 info->NDTtype = NDT_SF2DNode;
   14894       12264 :                 info->far_ptr = & ((M_Transform2D *)node)->addChildren;
   14895       12264 :                 return GF_OK;
   14896             :         case 1:
   14897       12256 :                 info->name = "removeChildren";
   14898       12256 :                 info->eventType = GF_SG_EVENT_IN;
   14899       12256 :                 info->on_event_in = ((M_Transform2D *)node)->on_removeChildren;
   14900       12256 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14901       12256 :                 info->NDTtype = NDT_SF2DNode;
   14902       12256 :                 info->far_ptr = & ((M_Transform2D *)node)->removeChildren;
   14903       12256 :                 return GF_OK;
   14904             :         case 2:
   14905       40082 :                 info->name = "children";
   14906       40082 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14907       40082 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14908       40082 :                 info->NDTtype = NDT_SF2DNode;
   14909       40082 :                 info->far_ptr = & ((M_Transform2D *)node)->children;
   14910       40082 :                 return GF_OK;
   14911             :         case 3:
   14912       30596 :                 info->name = "center";
   14913       30596 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14914       30596 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14915       30596 :                 info->far_ptr = & ((M_Transform2D *) node)->center;
   14916       30596 :                 return GF_OK;
   14917             :         case 4:
   14918       30848 :                 info->name = "rotationAngle";
   14919       30848 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14920       30848 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14921       30848 :                 info->far_ptr = & ((M_Transform2D *) node)->rotationAngle;
   14922       30848 :                 return GF_OK;
   14923             :         case 5:
   14924       32396 :                 info->name = "scale";
   14925       32396 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14926       32396 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14927       32396 :                 info->far_ptr = & ((M_Transform2D *) node)->scale;
   14928       32396 :                 return GF_OK;
   14929             :         case 6:
   14930       30641 :                 info->name = "scaleOrientation";
   14931       30641 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14932       30641 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14933       30641 :                 info->far_ptr = & ((M_Transform2D *) node)->scaleOrientation;
   14934       30641 :                 return GF_OK;
   14935             :         case 7:
   14936       47568 :                 info->name = "translation";
   14937       47568 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14938       47568 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14939       47568 :                 info->far_ptr = & ((M_Transform2D *) node)->translation;
   14940       47568 :                 return GF_OK;
   14941             :         default:
   14942           0 :                 return GF_BAD_PARAM;
   14943             :         }
   14944      236651 : }
   14945             : 
   14946             : 
   14947             : static s32 Transform2D_get_field_index_by_name(char *name)
   14948             : {
   14949       57060 :         if (!strcmp("addChildren", name)) return 0;
   14950       28522 :         if (!strcmp("removeChildren", name)) return 1;
   14951       36050 :         if (!strcmp("children", name)) return 2;
   14952       20978 :         if (!strcmp("center", name)) return 3;
   14953       21063 :         if (!strcmp("rotationAngle", name)) return 4;
   14954       21500 :         if (!strcmp("scale", name)) return 5;
   14955       20298 :         if (!strcmp("scaleOrientation", name)) return 6;
   14956       24990 :         if (!strcmp("translation", name)) return 7;
   14957       15558 :         return -1;
   14958       28526 : }
   14959             : static Bool Transform2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14960             : {
   14961          14 :         switch (FieldIndex) {
   14962             :         case 3:
   14963           0 :                 *AType = 2;
   14964           0 :                 *QType = 2;
   14965           0 :                 *b_min = FIX_MIN;
   14966           0 :                 *b_max = FIX_MAX;
   14967           0 :                 return 1;
   14968             :         case 4:
   14969           0 :                 *AType = 6;
   14970           0 :                 *QType = 6;
   14971           0 :                 *b_min = FLT2FIX(0);
   14972           0 :                 *b_max = FLT2FIX(6.2831853);
   14973           0 :                 return 1;
   14974             :         case 5:
   14975           7 :                 *AType = 12;
   14976           7 :                 *QType = 7;
   14977           7 :                 *b_min = FIX_MIN;
   14978           7 :                 *b_max = FIX_MAX;
   14979           7 :                 return 1;
   14980             :         case 6:
   14981           0 :                 *AType = 6;
   14982           0 :                 *QType = 6;
   14983           0 :                 *b_min = FLT2FIX(0);
   14984           0 :                 *b_max = FLT2FIX(6.2831853);
   14985           0 :                 return 1;
   14986             :         case 7:
   14987           0 :                 *AType = 2;
   14988           0 :                 *QType = 2;
   14989           0 :                 *b_min = FIX_MIN;
   14990           0 :                 *b_max = FIX_MAX;
   14991           0 :                 return 1;
   14992             :         default:
   14993           0 :                 return 0;
   14994             :         }
   14995           7 : }
   14996             : 
   14997             : 
   14998             : 
   14999             : GF_Node *Transform2D_Create()
   15000             : {
   15001             :         M_Transform2D *p;
   15002       87543 :         GF_SAFEALLOC(p, M_Transform2D);
   15003       29181 :         if(!p) return NULL;
   15004       29181 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Transform2D);
   15005       29181 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   15006             : 
   15007             :         /*default field values*/
   15008       29181 :         p->center.x = FLT2FIX(0);
   15009       29181 :         p->center.y = FLT2FIX(0);
   15010       29181 :         p->rotationAngle = FLT2FIX(0);
   15011       29181 :         p->scale.x = FLT2FIX(1);
   15012       29181 :         p->scale.y = FLT2FIX(1);
   15013       29181 :         p->scaleOrientation = FLT2FIX(0);
   15014       29181 :         p->translation.x = FLT2FIX(0);
   15015       29181 :         p->translation.y = FLT2FIX(0);
   15016       29181 :         return (GF_Node *)p;
   15017       29181 : }
   15018             : 
   15019             : 
   15020             : /*
   15021             :         Valuator Node deletion
   15022             : */
   15023             : 
   15024             : static void Valuator_Del(GF_Node *node)
   15025             : {
   15026       13056 :         M_Valuator *p = (M_Valuator *) node;
   15027        6528 :         gf_sg_mfcolor_del(p->inMFColor);
   15028        6528 :         gf_sg_mffloat_del(p->inMFFloat);
   15029        6528 :         gf_sg_mfint32_del(p->inMFInt32);
   15030        6528 :         gf_sg_mfrotation_del(p->inMFRotation);
   15031        6528 :         gf_sg_sfstring_del(p->inSFString);
   15032        6528 :         gf_sg_mfstring_del(p->inMFString);
   15033        6528 :         gf_sg_mfvec2f_del(p->inMFVec2f);
   15034        6528 :         gf_sg_mfvec3f_del(p->inMFVec3f);
   15035        6528 :         gf_sg_mfcolor_del(p->outMFColor);
   15036        6528 :         gf_sg_mffloat_del(p->outMFFloat);
   15037        6528 :         gf_sg_mfint32_del(p->outMFInt32);
   15038        6528 :         gf_sg_mfrotation_del(p->outMFRotation);
   15039        6528 :         gf_sg_sfstring_del(p->outSFString);
   15040        6528 :         gf_sg_mfstring_del(p->outMFString);
   15041        6528 :         gf_sg_mfvec2f_del(p->outMFVec2f);
   15042        6528 :         gf_sg_mfvec3f_del(p->outMFVec3f);
   15043        6528 :         gf_node_free((GF_Node *) p);
   15044        6528 : }
   15045             : 
   15046             : static const u16 Valuator_Def2All[] = { 32, 33, 34, 35, 36, 37, 38, 39, 40};
   15047             : static const u16 Valuator_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 33, 34, 35, 36, 37, 38, 39, 40};
   15048             : static const u16 Valuator_Out2All[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40};
   15049             : 
   15050             : static u32 Valuator_get_field_count(GF_Node *node, u8 IndexMode)
   15051             : {
   15052       23448 :         switch(IndexMode) {
   15053             :         case GF_SG_FIELD_CODING_IN:
   15054        2915 :                 return 25;
   15055             :         case GF_SG_FIELD_CODING_DEF:
   15056        2882 :                 return 9;
   15057             :         case GF_SG_FIELD_CODING_OUT:
   15058        2861 :                 return 25;
   15059             :         case GF_SG_FIELD_CODING_DYN:
   15060           0 :                 return 0;
   15061             :         default:
   15062        3066 :                 return 41;
   15063             :         }
   15064       11724 : }
   15065             : 
   15066             : static GF_Err Valuator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15067             : {
   15068       49462 :         switch(IndexMode) {
   15069             :         case GF_SG_FIELD_CODING_IN:
   15070        9433 :                 *allField = Valuator_In2All[inField];
   15071        9433 :                 return GF_OK;
   15072             :         case GF_SG_FIELD_CODING_DEF:
   15073        5863 :                 *allField = Valuator_Def2All[inField];
   15074        5863 :                 return GF_OK;
   15075             :         case GF_SG_FIELD_CODING_OUT:
   15076        9435 :                 *allField = Valuator_Out2All[inField];
   15077        9435 :                 return GF_OK;
   15078             :         default:
   15079           0 :                 return GF_BAD_PARAM;
   15080             :         }
   15081       24731 : }
   15082             : static GF_Err Valuator_get_field(GF_Node *node, GF_FieldInfo *info)
   15083             : {
   15084      339182 :         switch (info->fieldIndex) {
   15085             :         case 0:
   15086        3158 :                 info->name = "inSFBool";
   15087        3158 :                 info->eventType = GF_SG_EVENT_IN;
   15088        3158 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFBool;
   15089        3158 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15090        3158 :                 info->far_ptr = & ((M_Valuator *) node)->inSFBool;
   15091        3158 :                 return GF_OK;
   15092             :         case 1:
   15093        3084 :                 info->name = "inSFColor";
   15094        3084 :                 info->eventType = GF_SG_EVENT_IN;
   15095        3084 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFColor;
   15096        3084 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   15097        3084 :                 info->far_ptr = & ((M_Valuator *) node)->inSFColor;
   15098        3084 :                 return GF_OK;
   15099             :         case 2:
   15100        3009 :                 info->name = "inMFColor";
   15101        3009 :                 info->eventType = GF_SG_EVENT_IN;
   15102        3009 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFColor;
   15103        3009 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   15104        3009 :                 info->far_ptr = & ((M_Valuator *) node)->inMFColor;
   15105        3009 :                 return GF_OK;
   15106             :         case 3:
   15107        3026 :                 info->name = "inSFFloat";
   15108        3026 :                 info->eventType = GF_SG_EVENT_IN;
   15109        3026 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFFloat;
   15110        3026 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15111        3026 :                 info->far_ptr = & ((M_Valuator *) node)->inSFFloat;
   15112        3026 :                 return GF_OK;
   15113             :         case 4:
   15114        3009 :                 info->name = "inMFFloat";
   15115        3009 :                 info->eventType = GF_SG_EVENT_IN;
   15116        3009 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFFloat;
   15117        3009 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   15118        3009 :                 info->far_ptr = & ((M_Valuator *) node)->inMFFloat;
   15119        3009 :                 return GF_OK;
   15120             :         case 5:
   15121        3121 :                 info->name = "inSFInt32";
   15122        3121 :                 info->eventType = GF_SG_EVENT_IN;
   15123        3121 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFInt32;
   15124        3121 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15125        3121 :                 info->far_ptr = & ((M_Valuator *) node)->inSFInt32;
   15126        3121 :                 return GF_OK;
   15127             :         case 6:
   15128        3009 :                 info->name = "inMFInt32";
   15129        3009 :                 info->eventType = GF_SG_EVENT_IN;
   15130        3009 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFInt32;
   15131        3009 :                 info->fieldType = GF_SG_VRML_MFINT32;
   15132        3009 :                 info->far_ptr = & ((M_Valuator *) node)->inMFInt32;
   15133        3009 :                 return GF_OK;
   15134             :         case 7:
   15135        3009 :                 info->name = "inSFRotation";
   15136        3009 :                 info->eventType = GF_SG_EVENT_IN;
   15137        3009 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFRotation;
   15138        3009 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   15139        3009 :                 info->far_ptr = & ((M_Valuator *) node)->inSFRotation;
   15140        3009 :                 return GF_OK;
   15141             :         case 8:
   15142        3009 :                 info->name = "inMFRotation";
   15143        3009 :                 info->eventType = GF_SG_EVENT_IN;
   15144        3009 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFRotation;
   15145        3009 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   15146        3009 :                 info->far_ptr = & ((M_Valuator *) node)->inMFRotation;
   15147        3009 :                 return GF_OK;
   15148             :         case 9:
   15149        3025 :                 info->name = "inSFString";
   15150        3025 :                 info->eventType = GF_SG_EVENT_IN;
   15151        3025 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFString;
   15152        3025 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   15153        3025 :                 info->far_ptr = & ((M_Valuator *) node)->inSFString;
   15154        3025 :                 return GF_OK;
   15155             :         case 10:
   15156        3009 :                 info->name = "inMFString";
   15157        3009 :                 info->eventType = GF_SG_EVENT_IN;
   15158        3009 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFString;
   15159        3009 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   15160        3009 :                 info->far_ptr = & ((M_Valuator *) node)->inMFString;
   15161        3009 :                 return GF_OK;
   15162             :         case 11:
   15163        3113 :                 info->name = "inSFTime";
   15164        3113 :                 info->eventType = GF_SG_EVENT_IN;
   15165        3113 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFTime;
   15166        3113 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15167        3113 :                 info->far_ptr = & ((M_Valuator *) node)->inSFTime;
   15168        3113 :                 return GF_OK;
   15169             :         case 12:
   15170        7024 :                 info->name = "inSFVec2f";
   15171        7024 :                 info->eventType = GF_SG_EVENT_IN;
   15172        7024 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFVec2f;
   15173        7024 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   15174        7024 :                 info->far_ptr = & ((M_Valuator *) node)->inSFVec2f;
   15175        7024 :                 return GF_OK;
   15176             :         case 13:
   15177        3017 :                 info->name = "inMFVec2f";
   15178        3017 :                 info->eventType = GF_SG_EVENT_IN;
   15179        3017 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFVec2f;
   15180        3017 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   15181        3017 :                 info->far_ptr = & ((M_Valuator *) node)->inMFVec2f;
   15182        3017 :                 return GF_OK;
   15183             :         case 14:
   15184        3049 :                 info->name = "inSFVec3f";
   15185        3049 :                 info->eventType = GF_SG_EVENT_IN;
   15186        3049 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFVec3f;
   15187        3049 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15188        3049 :                 info->far_ptr = & ((M_Valuator *) node)->inSFVec3f;
   15189        3049 :                 return GF_OK;
   15190             :         case 15:
   15191        3009 :                 info->name = "inMFVec3f";
   15192        3009 :                 info->eventType = GF_SG_EVENT_IN;
   15193        3009 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFVec3f;
   15194        3009 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   15195        3009 :                 info->far_ptr = & ((M_Valuator *) node)->inMFVec3f;
   15196        3009 :                 return GF_OK;
   15197             :         case 16:
   15198        3041 :                 info->name = "outSFBool";
   15199        3041 :                 info->eventType = GF_SG_EVENT_OUT;
   15200        3041 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15201        3041 :                 info->far_ptr = & ((M_Valuator *) node)->outSFBool;
   15202        3041 :                 return GF_OK;
   15203             :         case 17:
   15204        3049 :                 info->name = "outSFColor";
   15205        3049 :                 info->eventType = GF_SG_EVENT_OUT;
   15206        3049 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   15207        3049 :                 info->far_ptr = & ((M_Valuator *) node)->outSFColor;
   15208        3049 :                 return GF_OK;
   15209             :         case 18:
   15210        3009 :                 info->name = "outMFColor";
   15211        3009 :                 info->eventType = GF_SG_EVENT_OUT;
   15212        3009 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   15213        3009 :                 info->far_ptr = & ((M_Valuator *) node)->outMFColor;
   15214        3009 :                 return GF_OK;
   15215             :         case 19:
   15216        3073 :                 info->name = "outSFFloat";
   15217        3073 :                 info->eventType = GF_SG_EVENT_OUT;
   15218        3073 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15219        3073 :                 info->far_ptr = & ((M_Valuator *) node)->outSFFloat;
   15220        3073 :                 return GF_OK;
   15221             :         case 20:
   15222        3017 :                 info->name = "outMFFloat";
   15223        3017 :                 info->eventType = GF_SG_EVENT_OUT;
   15224        3017 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   15225        3017 :                 info->far_ptr = & ((M_Valuator *) node)->outMFFloat;
   15226        3017 :                 return GF_OK;
   15227             :         case 21:
   15228        3110 :                 info->name = "outSFInt32";
   15229        3110 :                 info->eventType = GF_SG_EVENT_OUT;
   15230        3110 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15231        3110 :                 info->far_ptr = & ((M_Valuator *) node)->outSFInt32;
   15232        3110 :                 return GF_OK;
   15233             :         case 22:
   15234        3009 :                 info->name = "outMFInt32";
   15235        3009 :                 info->eventType = GF_SG_EVENT_OUT;
   15236        3009 :                 info->fieldType = GF_SG_VRML_MFINT32;
   15237        3009 :                 info->far_ptr = & ((M_Valuator *) node)->outMFInt32;
   15238        3009 :                 return GF_OK;
   15239             :         case 23:
   15240        3009 :                 info->name = "outSFRotation";
   15241        3009 :                 info->eventType = GF_SG_EVENT_OUT;
   15242        3009 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   15243        3009 :                 info->far_ptr = & ((M_Valuator *) node)->outSFRotation;
   15244        3009 :                 return GF_OK;
   15245             :         case 24:
   15246        3009 :                 info->name = "outMFRotation";
   15247        3009 :                 info->eventType = GF_SG_EVENT_OUT;
   15248        3009 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   15249        3009 :                 info->far_ptr = & ((M_Valuator *) node)->outMFRotation;
   15250        3009 :                 return GF_OK;
   15251             :         case 25:
   15252        3009 :                 info->name = "outSFString";
   15253        3009 :                 info->eventType = GF_SG_EVENT_OUT;
   15254        3009 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   15255        3009 :                 info->far_ptr = & ((M_Valuator *) node)->outSFString;
   15256        3009 :                 return GF_OK;
   15257             :         case 26:
   15258        3269 :                 info->name = "outMFString";
   15259        3269 :                 info->eventType = GF_SG_EVENT_OUT;
   15260        3269 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   15261        3269 :                 info->far_ptr = & ((M_Valuator *) node)->outMFString;
   15262        3269 :                 return GF_OK;
   15263             :         case 27:
   15264        3017 :                 info->name = "outSFTime";
   15265        3017 :                 info->eventType = GF_SG_EVENT_OUT;
   15266        3017 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15267        3017 :                 info->far_ptr = & ((M_Valuator *) node)->outSFTime;
   15268        3017 :                 return GF_OK;
   15269             :         case 28:
   15270        5169 :                 info->name = "outSFVec2f";
   15271        5169 :                 info->eventType = GF_SG_EVENT_OUT;
   15272        5169 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   15273        5169 :                 info->far_ptr = & ((M_Valuator *) node)->outSFVec2f;
   15274        5169 :                 return GF_OK;
   15275             :         case 29:
   15276        3009 :                 info->name = "outMFVec2f";
   15277        3009 :                 info->eventType = GF_SG_EVENT_OUT;
   15278        3009 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   15279        3009 :                 info->far_ptr = & ((M_Valuator *) node)->outMFVec2f;
   15280        3009 :                 return GF_OK;
   15281             :         case 30:
   15282        3009 :                 info->name = "outSFVec3f";
   15283        3009 :                 info->eventType = GF_SG_EVENT_OUT;
   15284        3009 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15285        3009 :                 info->far_ptr = & ((M_Valuator *) node)->outSFVec3f;
   15286        3009 :                 return GF_OK;
   15287             :         case 31:
   15288        3009 :                 info->name = "outMFVec3f";
   15289        3009 :                 info->eventType = GF_SG_EVENT_OUT;
   15290        3009 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   15291        3009 :                 info->far_ptr = & ((M_Valuator *) node)->outMFVec3f;
   15292        3009 :                 return GF_OK;
   15293             :         case 32:
   15294        7483 :                 info->name = "Factor1";
   15295        7483 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15296        7483 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15297        7483 :                 info->far_ptr = & ((M_Valuator *) node)->Factor1;
   15298        7483 :                 return GF_OK;
   15299             :         case 33:
   15300        7409 :                 info->name = "Factor2";
   15301        7409 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15302        7409 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15303        7409 :                 info->far_ptr = & ((M_Valuator *) node)->Factor2;
   15304        7409 :                 return GF_OK;
   15305             :         case 34:
   15306        7334 :                 info->name = "Factor3";
   15307        7334 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15308        7334 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15309        7334 :                 info->far_ptr = & ((M_Valuator *) node)->Factor3;
   15310        7334 :                 return GF_OK;
   15311             :         case 35:
   15312        7319 :                 info->name = "Factor4";
   15313        7319 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15314        7319 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15315        7319 :                 info->far_ptr = & ((M_Valuator *) node)->Factor4;
   15316        7319 :                 return GF_OK;
   15317             :         case 36:
   15318        7378 :                 info->name = "Offset1";
   15319        7378 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15320        7378 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15321        7378 :                 info->far_ptr = & ((M_Valuator *) node)->Offset1;
   15322        7378 :                 return GF_OK;
   15323             :         case 37:
   15324        7349 :                 info->name = "Offset2";
   15325        7349 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15326        7349 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15327        7349 :                 info->far_ptr = & ((M_Valuator *) node)->Offset2;
   15328        7349 :                 return GF_OK;
   15329             :         case 38:
   15330        7274 :                 info->name = "Offset3";
   15331        7274 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15332        7274 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15333        7274 :                 info->far_ptr = & ((M_Valuator *) node)->Offset3;
   15334        7274 :                 return GF_OK;
   15335             :         case 39:
   15336        7274 :                 info->name = "Offset4";
   15337        7274 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15338        7274 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15339        7274 :                 info->far_ptr = & ((M_Valuator *) node)->Offset4;
   15340        7274 :                 return GF_OK;
   15341             :         case 40:
   15342        7274 :                 info->name = "Sum";
   15343        7274 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15344        7274 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15345        7274 :                 info->far_ptr = & ((M_Valuator *) node)->Sum;
   15346        7274 :                 return GF_OK;
   15347             :         default:
   15348           0 :                 return GF_BAD_PARAM;
   15349             :         }
   15350      169591 : }
   15351             : 
   15352             : 
   15353             : static s32 Valuator_get_field_index_by_name(char *name)
   15354             : {
   15355        5606 :         if (!strcmp("inSFBool", name)) return 0;
   15356        2727 :         if (!strcmp("inSFColor", name)) return 1;
   15357        2687 :         if (!strcmp("inMFColor", name)) return 2;
   15358        2696 :         if (!strcmp("inSFFloat", name)) return 3;
   15359        2678 :         if (!strcmp("inMFFloat", name)) return 4;
   15360        2714 :         if (!strcmp("inSFInt32", name)) return 5;
   15361        2642 :         if (!strcmp("inMFInt32", name)) return 6;
   15362        2642 :         if (!strcmp("inSFRotation", name)) return 7;
   15363        2642 :         if (!strcmp("inMFRotation", name)) return 8;
   15364        2650 :         if (!strcmp("inSFString", name)) return 9;
   15365        2634 :         if (!strcmp("inMFString", name)) return 10;
   15366        2686 :         if (!strcmp("inSFTime", name)) return 11;
   15367        3662 :         if (!strcmp("inSFVec2f", name)) return 12;
   15368        1506 :         if (!strcmp("inMFVec2f", name)) return 13;
   15369        1518 :         if (!strcmp("inSFVec3f", name)) return 14;
   15370        1478 :         if (!strcmp("inMFVec3f", name)) return 15;
   15371        1494 :         if (!strcmp("outSFBool", name)) return 16;
   15372        1470 :         if (!strcmp("outSFColor", name)) return 17;
   15373        1454 :         if (!strcmp("outMFColor", name)) return 18;
   15374        1486 :         if (!strcmp("outSFFloat", name)) return 19;
   15375        1426 :         if (!strcmp("outMFFloat", name)) return 20;
   15376        1451 :         if (!strcmp("outSFInt32", name)) return 21;
   15377        1385 :         if (!strcmp("outMFInt32", name)) return 22;
   15378        1385 :         if (!strcmp("outSFRotation", name)) return 23;
   15379        1385 :         if (!strcmp("outMFRotation", name)) return 24;
   15380        1385 :         if (!strcmp("outSFString", name)) return 25;
   15381        1509 :         if (!strcmp("outMFString", name)) return 26;
   15382        1265 :         if (!strcmp("outSFTime", name)) return 27;
   15383        2337 :         if (!strcmp("outSFVec2f", name)) return 28;
   15384         177 :         if (!strcmp("outMFVec2f", name)) return 29;
   15385         177 :         if (!strcmp("outSFVec3f", name)) return 30;
   15386         177 :         if (!strcmp("outMFVec3f", name)) return 31;
   15387         242 :         if (!strcmp("Factor1", name)) return 32;
   15388         148 :         if (!strcmp("Factor2", name)) return 33;
   15389          92 :         if (!strcmp("Factor3", name)) return 34;
   15390          72 :         if (!strcmp("Factor4", name)) return 35;
   15391          76 :         if (!strcmp("Offset1", name)) return 36;
   15392          40 :         if (!strcmp("Offset2", name)) return 37;
   15393           0 :         if (!strcmp("Offset3", name)) return 38;
   15394           0 :         if (!strcmp("Offset4", name)) return 39;
   15395           0 :         if (!strcmp("Sum", name)) return 40;
   15396           0 :         return -1;
   15397        2771 : }
   15398             : static Bool Valuator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15399             : {
   15400           0 :         switch (FieldIndex) {
   15401             :         case 32:
   15402           0 :                 *AType = 0;
   15403           0 :                 *QType = 0;
   15404           0 :                 *b_min = FIX_MIN;
   15405           0 :                 *b_max = FIX_MAX;
   15406           0 :                 return 1;
   15407             :         case 33:
   15408           0 :                 *AType = 0;
   15409           0 :                 *QType = 0;
   15410           0 :                 *b_min = FIX_MIN;
   15411           0 :                 *b_max = FIX_MAX;
   15412           0 :                 return 1;
   15413             :         case 34:
   15414           0 :                 *AType = 0;
   15415           0 :                 *QType = 0;
   15416           0 :                 *b_min = FIX_MIN;
   15417           0 :                 *b_max = FIX_MAX;
   15418           0 :                 return 1;
   15419             :         case 35:
   15420           0 :                 *AType = 0;
   15421           0 :                 *QType = 0;
   15422           0 :                 *b_min = FIX_MIN;
   15423           0 :                 *b_max = FIX_MAX;
   15424           0 :                 return 1;
   15425             :         case 36:
   15426           0 :                 *AType = 0;
   15427           0 :                 *QType = 0;
   15428           0 :                 *b_min = FIX_MIN;
   15429           0 :                 *b_max = FIX_MAX;
   15430           0 :                 return 1;
   15431             :         case 37:
   15432           0 :                 *AType = 0;
   15433           0 :                 *QType = 0;
   15434           0 :                 *b_min = FIX_MIN;
   15435           0 :                 *b_max = FIX_MAX;
   15436           0 :                 return 1;
   15437             :         case 38:
   15438           0 :                 *AType = 0;
   15439           0 :                 *QType = 0;
   15440           0 :                 *b_min = FIX_MIN;
   15441           0 :                 *b_max = FIX_MAX;
   15442           0 :                 return 1;
   15443             :         case 39:
   15444           0 :                 *AType = 0;
   15445           0 :                 *QType = 0;
   15446           0 :                 *b_min = FIX_MIN;
   15447           0 :                 *b_max = FIX_MAX;
   15448           0 :                 return 1;
   15449             :         default:
   15450           0 :                 return 0;
   15451             :         }
   15452           0 : }
   15453             : 
   15454             : 
   15455             : 
   15456             : GF_Node *Valuator_Create()
   15457             : {
   15458             :         M_Valuator *p;
   15459       19584 :         GF_SAFEALLOC(p, M_Valuator);
   15460        6528 :         if(!p) return NULL;
   15461        6528 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Valuator);
   15462             : 
   15463             :         /*default field values*/
   15464        6528 :         p->Factor1 = FLT2FIX(1.0);
   15465        6528 :         p->Factor2 = FLT2FIX(1.0);
   15466        6528 :         p->Factor3 = FLT2FIX(1.0);
   15467        6528 :         p->Factor4 = FLT2FIX(1.0);
   15468        6528 :         p->Offset1 = FLT2FIX(0.0);
   15469        6528 :         p->Offset2 = FLT2FIX(0.0);
   15470        6528 :         p->Offset3 = FLT2FIX(0.0);
   15471        6528 :         p->Offset4 = FLT2FIX(0.0);
   15472        6528 :         return (GF_Node *)p;
   15473        6528 : }
   15474             : 
   15475             : 
   15476             : /*
   15477             :         Viewpoint Node deletion
   15478             : */
   15479             : 
   15480             : static void Viewpoint_Del(GF_Node *node)
   15481             : {
   15482        1190 :         M_Viewpoint *p = (M_Viewpoint *) node;
   15483         595 :         gf_sg_sfstring_del(p->description);
   15484         595 :         gf_node_free((GF_Node *) p);
   15485         595 : }
   15486             : 
   15487             : static const u16 Viewpoint_Def2All[] = { 1, 2, 3, 4, 5};
   15488             : static const u16 Viewpoint_In2All[] = { 0, 1, 2, 3, 4};
   15489             : static const u16 Viewpoint_Out2All[] = { 1, 2, 3, 4, 6, 7};
   15490             : static const u16 Viewpoint_Dyn2All[] = { 1, 3, 4};
   15491             : 
   15492             : static u32 Viewpoint_get_field_count(GF_Node *node, u8 IndexMode)
   15493             : {
   15494        1202 :         switch(IndexMode) {
   15495             :         case GF_SG_FIELD_CODING_IN:
   15496          72 :                 return 5;
   15497             :         case GF_SG_FIELD_CODING_DEF:
   15498         297 :                 return 5;
   15499             :         case GF_SG_FIELD_CODING_OUT:
   15500           0 :                 return 6;
   15501             :         case GF_SG_FIELD_CODING_DYN:
   15502           0 :                 return 3;
   15503             :         default:
   15504         232 :                 return 8;
   15505             :         }
   15506         601 : }
   15507             : 
   15508             : static GF_Err Viewpoint_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15509             : {
   15510        1230 :         switch(IndexMode) {
   15511             :         case GF_SG_FIELD_CODING_IN:
   15512          70 :                 *allField = Viewpoint_In2All[inField];
   15513          70 :                 return GF_OK;
   15514             :         case GF_SG_FIELD_CODING_DEF:
   15515         545 :                 *allField = Viewpoint_Def2All[inField];
   15516         545 :                 return GF_OK;
   15517             :         case GF_SG_FIELD_CODING_OUT:
   15518           0 :                 *allField = Viewpoint_Out2All[inField];
   15519           0 :                 return GF_OK;
   15520             :         case GF_SG_FIELD_CODING_DYN:
   15521           0 :                 *allField = Viewpoint_Dyn2All[inField];
   15522           0 :                 return GF_OK;
   15523             :         default:
   15524           0 :                 return GF_BAD_PARAM;
   15525             :         }
   15526         615 : }
   15527             : static GF_Err Viewpoint_get_field(GF_Node *node, GF_FieldInfo *info)
   15528             : {
   15529        8886 :         switch (info->fieldIndex) {
   15530             :         case 0:
   15531         322 :                 info->name = "set_bind";
   15532         322 :                 info->eventType = GF_SG_EVENT_IN;
   15533         322 :                 info->on_event_in = ((M_Viewpoint *)node)->on_set_bind;
   15534         322 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15535         322 :                 info->far_ptr = & ((M_Viewpoint *) node)->set_bind;
   15536         322 :                 return GF_OK;
   15537             :         case 1:
   15538         611 :                 info->name = "fieldOfView";
   15539         611 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15540         611 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15541         611 :                 info->far_ptr = & ((M_Viewpoint *) node)->fieldOfView;
   15542         611 :                 return GF_OK;
   15543             :         case 2:
   15544         656 :                 info->name = "jump";
   15545         656 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15546         656 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15547         656 :                 info->far_ptr = & ((M_Viewpoint *) node)->jump;
   15548         656 :                 return GF_OK;
   15549             :         case 3:
   15550         694 :                 info->name = "orientation";
   15551         694 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15552         694 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   15553         694 :                 info->far_ptr = & ((M_Viewpoint *) node)->orientation;
   15554         694 :                 return GF_OK;
   15555             :         case 4:
   15556         905 :                 info->name = "position";
   15557         905 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15558         905 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15559         905 :                 info->far_ptr = & ((M_Viewpoint *) node)->position;
   15560         905 :                 return GF_OK;
   15561             :         case 5:
   15562         791 :                 info->name = "description";
   15563         791 :                 info->eventType = GF_SG_EVENT_FIELD;
   15564         791 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   15565         791 :                 info->far_ptr = & ((M_Viewpoint *) node)->description;
   15566         791 :                 return GF_OK;
   15567             :         case 6:
   15568         232 :                 info->name = "bindTime";
   15569         232 :                 info->eventType = GF_SG_EVENT_OUT;
   15570         232 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15571         232 :                 info->far_ptr = & ((M_Viewpoint *) node)->bindTime;
   15572         232 :                 return GF_OK;
   15573             :         case 7:
   15574         232 :                 info->name = "isBound";
   15575         232 :                 info->eventType = GF_SG_EVENT_OUT;
   15576         232 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15577         232 :                 info->far_ptr = & ((M_Viewpoint *) node)->isBound;
   15578         232 :                 return GF_OK;
   15579             :         default:
   15580           0 :                 return GF_BAD_PARAM;
   15581             :         }
   15582        4443 : }
   15583             : 
   15584             : 
   15585             : static s32 Viewpoint_get_field_index_by_name(char *name)
   15586             : {
   15587         464 :         if (!strcmp("set_bind", name)) return 0;
   15588         200 :         if (!strcmp("fieldOfView", name)) return 1;
   15589         208 :         if (!strcmp("jump", name)) return 2;
   15590         204 :         if (!strcmp("orientation", name)) return 3;
   15591         244 :         if (!strcmp("position", name)) return 4;
   15592         104 :         if (!strcmp("description", name)) return 5;
   15593           0 :         if (!strcmp("bindTime", name)) return 6;
   15594           0 :         if (!strcmp("isBound", name)) return 7;
   15595           0 :         return -1;
   15596         220 : }
   15597             : static Bool Viewpoint_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15598             : {
   15599           0 :         switch (FieldIndex) {
   15600             :         case 1:
   15601           0 :                 *AType = 8;
   15602           0 :                 *QType = 6;
   15603           0 :                 *b_min = FLT2FIX(0);
   15604           0 :                 *b_max = FLT2FIX(3.1415927);
   15605           0 :                 return 1;
   15606             :         case 3:
   15607           0 :                 *AType = 10;
   15608           0 :                 *QType = 10;
   15609           0 :                 return 1;
   15610             :         case 4:
   15611           0 :                 *AType = 1;
   15612           0 :                 *QType = 1;
   15613           0 :                 *b_min = FIX_MIN;
   15614           0 :                 *b_max = FIX_MAX;
   15615           0 :                 return 1;
   15616             :         default:
   15617           0 :                 return 0;
   15618             :         }
   15619           0 : }
   15620             : 
   15621             : 
   15622             : 
   15623             : GF_Node *Viewpoint_Create()
   15624             : {
   15625             :         M_Viewpoint *p;
   15626        1785 :         GF_SAFEALLOC(p, M_Viewpoint);
   15627         595 :         if(!p) return NULL;
   15628         595 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Viewpoint);
   15629             : 
   15630             :         /*default field values*/
   15631         595 :         p->fieldOfView = FLT2FIX(0.785398);
   15632         595 :         p->jump = 1;
   15633         595 :         p->orientation.x = FLT2FIX(0);
   15634         595 :         p->orientation.y = FLT2FIX(0);
   15635         595 :         p->orientation.z = FLT2FIX(1);
   15636         595 :         p->orientation.q = FLT2FIX(0);
   15637         595 :         p->position.x = FLT2FIX(0);
   15638         595 :         p->position.y = FLT2FIX(0);
   15639         595 :         p->position.z = FLT2FIX(10);
   15640         595 :         return (GF_Node *)p;
   15641         595 : }
   15642             : 
   15643             : 
   15644             : /*
   15645             :         VisibilitySensor Node deletion
   15646             : */
   15647             : 
   15648             : static void VisibilitySensor_Del(GF_Node *node)
   15649             : {
   15650          36 :         M_VisibilitySensor *p = (M_VisibilitySensor *) node;
   15651          18 :         gf_node_free((GF_Node *) p);
   15652          18 : }
   15653             : 
   15654             : static const u16 VisibilitySensor_Def2All[] = { 0, 1, 2};
   15655             : static const u16 VisibilitySensor_In2All[] = { 0, 1, 2};
   15656             : static const u16 VisibilitySensor_Out2All[] = { 0, 1, 2, 3, 4, 5};
   15657             : static const u16 VisibilitySensor_Dyn2All[] = { 0, 2};
   15658             : 
   15659             : static u32 VisibilitySensor_get_field_count(GF_Node *node, u8 IndexMode)
   15660             : {
   15661          68 :         switch(IndexMode) {
   15662             :         case GF_SG_FIELD_CODING_IN:
   15663           0 :                 return 3;
   15664             :         case GF_SG_FIELD_CODING_DEF:
   15665           9 :                 return 3;
   15666             :         case GF_SG_FIELD_CODING_OUT:
   15667          18 :                 return 6;
   15668             :         case GF_SG_FIELD_CODING_DYN:
   15669           0 :                 return 2;
   15670             :         default:
   15671           7 :                 return 6;
   15672             :         }
   15673          34 : }
   15674             : 
   15675             : static GF_Err VisibilitySensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15676             : {
   15677          78 :         switch(IndexMode) {
   15678             :         case GF_SG_FIELD_CODING_IN:
   15679           0 :                 *allField = VisibilitySensor_In2All[inField];
   15680           0 :                 return GF_OK;
   15681             :         case GF_SG_FIELD_CODING_DEF:
   15682          11 :                 *allField = VisibilitySensor_Def2All[inField];
   15683          11 :                 return GF_OK;
   15684             :         case GF_SG_FIELD_CODING_OUT:
   15685          28 :                 *allField = VisibilitySensor_Out2All[inField];
   15686          28 :                 return GF_OK;
   15687             :         case GF_SG_FIELD_CODING_DYN:
   15688           0 :                 *allField = VisibilitySensor_Dyn2All[inField];
   15689           0 :                 return GF_OK;
   15690             :         default:
   15691           0 :                 return GF_BAD_PARAM;
   15692             :         }
   15693          39 : }
   15694             : static GF_Err VisibilitySensor_get_field(GF_Node *node, GF_FieldInfo *info)
   15695             : {
   15696         216 :         switch (info->fieldIndex) {
   15697             :         case 0:
   15698          20 :                 info->name = "center";
   15699          20 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15700          20 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15701          20 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->center;
   15702          20 :                 return GF_OK;
   15703             :         case 1:
   15704          18 :                 info->name = "enabled";
   15705          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15706          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15707          18 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->enabled;
   15708          18 :                 return GF_OK;
   15709             :         case 2:
   15710          33 :                 info->name = "size";
   15711          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15712          33 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15713          33 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->size;
   15714          33 :                 return GF_OK;
   15715             :         case 3:
   15716          15 :                 info->name = "enterTime";
   15717          15 :                 info->eventType = GF_SG_EVENT_OUT;
   15718          15 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15719          15 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->enterTime;
   15720          15 :                 return GF_OK;
   15721             :         case 4:
   15722          15 :                 info->name = "exitTime";
   15723          15 :                 info->eventType = GF_SG_EVENT_OUT;
   15724          15 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15725          15 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->exitTime;
   15726          15 :                 return GF_OK;
   15727             :         case 5:
   15728           7 :                 info->name = "isActive";
   15729           7 :                 info->eventType = GF_SG_EVENT_OUT;
   15730           7 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15731           7 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->isActive;
   15732           7 :                 return GF_OK;
   15733             :         default:
   15734           0 :                 return GF_BAD_PARAM;
   15735             :         }
   15736         108 : }
   15737             : 
   15738             : 
   15739             : static s32 VisibilitySensor_get_field_index_by_name(char *name)
   15740             : {
   15741          30 :         if (!strcmp("center", name)) return 0;
   15742          12 :         if (!strcmp("enabled", name)) return 1;
   15743          16 :         if (!strcmp("size", name)) return 2;
   15744          12 :         if (!strcmp("enterTime", name)) return 3;
   15745           8 :         if (!strcmp("exitTime", name)) return 4;
   15746           0 :         if (!strcmp("isActive", name)) return 5;
   15747           0 :         return -1;
   15748          14 : }
   15749             : static Bool VisibilitySensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15750             : {
   15751           0 :         switch (FieldIndex) {
   15752             :         case 0:
   15753           0 :                 *AType = 1;
   15754           0 :                 *QType = 1;
   15755           0 :                 *b_min = FIX_MIN;
   15756           0 :                 *b_max = FIX_MAX;
   15757           0 :                 return 1;
   15758             :         case 2:
   15759           0 :                 *AType = 11;
   15760           0 :                 *QType = 11;
   15761           0 :                 *b_min = FLT2FIX(0);
   15762           0 :                 *b_max = FIX_MAX;
   15763           0 :                 return 1;
   15764             :         default:
   15765           0 :                 return 0;
   15766             :         }
   15767           0 : }
   15768             : 
   15769             : 
   15770             : 
   15771             : GF_Node *VisibilitySensor_Create()
   15772             : {
   15773             :         M_VisibilitySensor *p;
   15774          54 :         GF_SAFEALLOC(p, M_VisibilitySensor);
   15775          18 :         if(!p) return NULL;
   15776          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_VisibilitySensor);
   15777             : 
   15778             :         /*default field values*/
   15779          18 :         p->center.x = FLT2FIX(0);
   15780          18 :         p->center.y = FLT2FIX(0);
   15781          18 :         p->center.z = FLT2FIX(0);
   15782          18 :         p->enabled = 1;
   15783          18 :         p->size.x = FLT2FIX(0);
   15784          18 :         p->size.y = FLT2FIX(0);
   15785          18 :         p->size.z = FLT2FIX(0);
   15786          18 :         return (GF_Node *)p;
   15787          18 : }
   15788             : 
   15789             : 
   15790             : /*
   15791             :         Viseme Node deletion
   15792             : */
   15793             : 
   15794             : static void Viseme_Del(GF_Node *node)
   15795             : {
   15796           0 :         M_Viseme *p = (M_Viseme *) node;
   15797           0 :         gf_node_free((GF_Node *) p);
   15798           0 : }
   15799             : 
   15800             : static const u16 Viseme_Def2All[] = { 0, 1, 2, 3};
   15801             : static const u16 Viseme_In2All[] = { 0, 1, 2, 3};
   15802             : static const u16 Viseme_Out2All[] = { 0, 1, 2, 3};
   15803             : 
   15804             : static u32 Viseme_get_field_count(GF_Node *node, u8 IndexMode)
   15805             : {
   15806           0 :         switch(IndexMode) {
   15807             :         case GF_SG_FIELD_CODING_IN:
   15808           0 :                 return 4;
   15809             :         case GF_SG_FIELD_CODING_DEF:
   15810           0 :                 return 4;
   15811             :         case GF_SG_FIELD_CODING_OUT:
   15812           0 :                 return 4;
   15813             :         case GF_SG_FIELD_CODING_DYN:
   15814           0 :                 return 0;
   15815             :         default:
   15816           0 :                 return 4;
   15817             :         }
   15818           0 : }
   15819             : 
   15820             : static GF_Err Viseme_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15821             : {
   15822           0 :         switch(IndexMode) {
   15823             :         case GF_SG_FIELD_CODING_IN:
   15824           0 :                 *allField = Viseme_In2All[inField];
   15825           0 :                 return GF_OK;
   15826             :         case GF_SG_FIELD_CODING_DEF:
   15827           0 :                 *allField = Viseme_Def2All[inField];
   15828           0 :                 return GF_OK;
   15829             :         case GF_SG_FIELD_CODING_OUT:
   15830           0 :                 *allField = Viseme_Out2All[inField];
   15831           0 :                 return GF_OK;
   15832             :         default:
   15833           0 :                 return GF_BAD_PARAM;
   15834             :         }
   15835           0 : }
   15836             : static GF_Err Viseme_get_field(GF_Node *node, GF_FieldInfo *info)
   15837             : {
   15838           0 :         switch (info->fieldIndex) {
   15839             :         case 0:
   15840           0 :                 info->name = "viseme_select1";
   15841           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15842           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15843           0 :                 info->far_ptr = & ((M_Viseme *) node)->viseme_select1;
   15844           0 :                 return GF_OK;
   15845             :         case 1:
   15846           0 :                 info->name = "viseme_select2";
   15847           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15848           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15849           0 :                 info->far_ptr = & ((M_Viseme *) node)->viseme_select2;
   15850           0 :                 return GF_OK;
   15851             :         case 2:
   15852           0 :                 info->name = "viseme_blend";
   15853           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15854           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15855           0 :                 info->far_ptr = & ((M_Viseme *) node)->viseme_blend;
   15856           0 :                 return GF_OK;
   15857             :         case 3:
   15858           0 :                 info->name = "viseme_def";
   15859           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15860           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15861           0 :                 info->far_ptr = & ((M_Viseme *) node)->viseme_def;
   15862           0 :                 return GF_OK;
   15863             :         default:
   15864           0 :                 return GF_BAD_PARAM;
   15865             :         }
   15866           0 : }
   15867             : 
   15868             : 
   15869             : static s32 Viseme_get_field_index_by_name(char *name)
   15870             : {
   15871           0 :         if (!strcmp("viseme_select1", name)) return 0;
   15872           0 :         if (!strcmp("viseme_select2", name)) return 1;
   15873           0 :         if (!strcmp("viseme_blend", name)) return 2;
   15874           0 :         if (!strcmp("viseme_def", name)) return 3;
   15875           0 :         return -1;
   15876           0 : }
   15877             : static Bool Viseme_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15878             : {
   15879           0 :         switch (FieldIndex) {
   15880             :         case 0:
   15881           0 :                 *AType = 0;
   15882           0 :                 *QType = 13;
   15883           0 :                 *QT13_bits = 5;
   15884           0 :                 *b_min = FLT2FIX(0);
   15885           0 :                 *b_max = FLT2FIX(31);
   15886           0 :                 return 1;
   15887             :         case 1:
   15888           0 :                 *AType = 0;
   15889           0 :                 *QType = 13;
   15890           0 :                 *QT13_bits = 5;
   15891           0 :                 *b_min = FLT2FIX(0);
   15892           0 :                 *b_max = FLT2FIX(31);
   15893           0 :                 return 1;
   15894             :         case 2:
   15895           0 :                 *AType = 0;
   15896           0 :                 *QType = 13;
   15897           0 :                 *QT13_bits = 6;
   15898           0 :                 *b_min = FLT2FIX(0);
   15899           0 :                 *b_max = FLT2FIX(63);
   15900           0 :                 return 1;
   15901             :         default:
   15902           0 :                 return 0;
   15903             :         }
   15904           0 : }
   15905             : 
   15906             : 
   15907             : 
   15908             : GF_Node *Viseme_Create()
   15909             : {
   15910             :         M_Viseme *p;
   15911           0 :         GF_SAFEALLOC(p, M_Viseme);
   15912           0 :         if(!p) return NULL;
   15913           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Viseme);
   15914             : 
   15915             :         /*default field values*/
   15916           0 :         p->viseme_select1 = 0;
   15917           0 :         p->viseme_select2 = 0;
   15918           0 :         p->viseme_blend = 0;
   15919           0 :         return (GF_Node *)p;
   15920           0 : }
   15921             : 
   15922             : 
   15923             : /*
   15924             :         WorldInfo Node deletion
   15925             : */
   15926             : 
   15927             : static void WorldInfo_Del(GF_Node *node)
   15928             : {
   15929       10692 :         M_WorldInfo *p = (M_WorldInfo *) node;
   15930        5346 :         gf_sg_mfstring_del(p->info);
   15931        5346 :         gf_sg_sfstring_del(p->title);
   15932        5346 :         gf_node_free((GF_Node *) p);
   15933        5346 : }
   15934             : 
   15935             : static const u16 WorldInfo_Def2All[] = { 0, 1};
   15936             : 
   15937             : static u32 WorldInfo_get_field_count(GF_Node *node, u8 IndexMode)
   15938             : {
   15939        9524 :         switch(IndexMode) {
   15940             :         case GF_SG_FIELD_CODING_IN:
   15941           0 :                 return 0;
   15942             :         case GF_SG_FIELD_CODING_DEF:
   15943        2644 :                 return 2;
   15944             :         case GF_SG_FIELD_CODING_OUT:
   15945           0 :                 return 0;
   15946             :         case GF_SG_FIELD_CODING_DYN:
   15947           0 :                 return 0;
   15948             :         default:
   15949        2118 :                 return 2;
   15950             :         }
   15951        4762 : }
   15952             : 
   15953             : static GF_Err WorldInfo_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15954             : {
   15955        8196 :         switch(IndexMode) {
   15956             :         case GF_SG_FIELD_CODING_DEF:
   15957        4098 :                 *allField = WorldInfo_Def2All[inField];
   15958        4098 :                 return GF_OK;
   15959             :         default:
   15960           0 :                 return GF_BAD_PARAM;
   15961             :         }
   15962        4098 : }
   15963             : static GF_Err WorldInfo_get_field(GF_Node *node, GF_FieldInfo *info)
   15964             : {
   15965       39284 :         switch (info->fieldIndex) {
   15966             :         case 0:
   15967        9821 :                 info->name = "info";
   15968        9821 :                 info->eventType = GF_SG_EVENT_FIELD;
   15969        9821 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   15970        9821 :                 info->far_ptr = & ((M_WorldInfo *) node)->info;
   15971        9821 :                 return GF_OK;
   15972             :         case 1:
   15973        9821 :                 info->name = "title";
   15974        9821 :                 info->eventType = GF_SG_EVENT_FIELD;
   15975        9821 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   15976        9821 :                 info->far_ptr = & ((M_WorldInfo *) node)->title;
   15977        9821 :                 return GF_OK;
   15978             :         default:
   15979           0 :                 return GF_BAD_PARAM;
   15980             :         }
   15981       19642 : }
   15982             : 
   15983             : 
   15984             : static s32 WorldInfo_get_field_index_by_name(char *name)
   15985             : {
   15986        5890 :         if (!strcmp("info", name)) return 0;
   15987        2356 :         if (!strcmp("title", name)) return 1;
   15988           0 :         return -1;
   15989        2356 : }
   15990             : static Bool WorldInfo_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15991             : {
   15992             :         switch (FieldIndex) {
   15993             :         default:
   15994           0 :                 return 0;
   15995             :         }
   15996             : }
   15997             : 
   15998             : 
   15999             : 
   16000             : GF_Node *WorldInfo_Create()
   16001             : {
   16002             :         M_WorldInfo *p;
   16003       16038 :         GF_SAFEALLOC(p, M_WorldInfo);
   16004        5346 :         if(!p) return NULL;
   16005        5346 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_WorldInfo);
   16006             : 
   16007             :         /*default field values*/
   16008        5346 :         return (GF_Node *)p;
   16009        5346 : }
   16010             : 
   16011             : 
   16012             : /*
   16013             :         AcousticMaterial Node deletion
   16014             : */
   16015             : 
   16016             : static void AcousticMaterial_Del(GF_Node *node)
   16017             : {
   16018           0 :         M_AcousticMaterial *p = (M_AcousticMaterial *) node;
   16019           0 :         gf_sg_mffloat_del(p->reffunc);
   16020           0 :         gf_sg_mffloat_del(p->transfunc);
   16021           0 :         gf_sg_mffloat_del(p->refFrequency);
   16022           0 :         gf_sg_mffloat_del(p->transFrequency);
   16023           0 :         gf_node_free((GF_Node *) p);
   16024           0 : }
   16025             : 
   16026             : static const u16 AcousticMaterial_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   16027             : static const u16 AcousticMaterial_In2All[] = { 0, 1, 2, 3, 4, 5};
   16028             : static const u16 AcousticMaterial_Out2All[] = { 0, 1, 2, 3, 4, 5};
   16029             : static const u16 AcousticMaterial_Dyn2All[] = { 0, 1, 2, 3, 4, 5};
   16030             : 
   16031             : static u32 AcousticMaterial_get_field_count(GF_Node *node, u8 IndexMode)
   16032             : {
   16033           0 :         switch(IndexMode) {
   16034             :         case GF_SG_FIELD_CODING_IN:
   16035           0 :                 return 6;
   16036             :         case GF_SG_FIELD_CODING_DEF:
   16037           0 :                 return 10;
   16038             :         case GF_SG_FIELD_CODING_OUT:
   16039           0 :                 return 6;
   16040             :         case GF_SG_FIELD_CODING_DYN:
   16041           0 :                 return 6;
   16042             :         default:
   16043           0 :                 return 10;
   16044             :         }
   16045           0 : }
   16046             : 
   16047             : static GF_Err AcousticMaterial_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   16048             : {
   16049           0 :         switch(IndexMode) {
   16050             :         case GF_SG_FIELD_CODING_IN:
   16051           0 :                 *allField = AcousticMaterial_In2All[inField];
   16052           0 :                 return GF_OK;
   16053             :         case GF_SG_FIELD_CODING_DEF:
   16054           0 :                 *allField = AcousticMaterial_Def2All[inField];
   16055           0 :                 return GF_OK;
   16056             :         case GF_SG_FIELD_CODING_OUT:
   16057           0 :                 *allField = AcousticMaterial_Out2All[inField];
   16058           0 :                 return GF_OK;
   16059             :         case GF_SG_FIELD_CODING_DYN:
   16060           0 :                 *allField = AcousticMaterial_Dyn2All[inField];
   16061           0 :                 return GF_OK;
   16062             :         default:
   16063           0 :                 return GF_BAD_PARAM;
   16064             :         }
   16065           0 : }
   16066             : static GF_Err AcousticMaterial_get_field(GF_Node *node, GF_FieldInfo *info)
   16067             : {
   16068           0 :         switch (info->fieldIndex) {
   16069             :         case 0:
   16070           0 :                 info->name = "ambientIntensity";
   16071           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16072           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   16073           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->ambientIntensity;
   16074           0 :                 return GF_OK;
   16075             :         case 1:
   16076           0 :                 info->name = "diffuseColor";
   16077           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16078           0 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   16079           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->diffuseColor;
   16080           0 :                 return GF_OK;
   16081             :         case 2:
   16082           0 :                 info->name = "emissiveColor";
   16083           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16084           0 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   16085           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->emissiveColor;
   16086           0 :                 return GF_OK;
   16087             :         case 3:
   16088           0 :                 info->name = "shininess";
   16089           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16090           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   16091           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->shininess;
   16092           0 :                 return GF_OK;
   16093             :         case 4:
   16094           0 :                 info->name = "specularColor";
   16095           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16096           0 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   16097           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->specularColor;
   16098           0 :                 return GF_OK;
   16099             :         case 5:
   16100           0 :                 info->name = "transparency";
   16101           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16102           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   16103           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->transparency;
   16104           0 :                 return GF_OK;
   16105             :         case 6:
   16106           0 :                 info->name = "reffunc";
   16107           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   16108           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16109           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->reffunc;
   16110           0 :                 return GF_OK;
   16111             :         case 7:
   16112           0 :                 info->name = "transfunc";
   16113           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   16114           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16115           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->transfunc;
   16116           0 :                 return GF_OK;
   16117             :         case 8:
   16118           0 :                 info->name = "refFrequency";
   16119           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   16120           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16121           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->refFrequency;
   16122           0 :                 return GF_OK;
   16123             :         case 9:
   16124           0 :                 info->name = "transFrequency";
   16125           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   16126           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16127           0 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->transFrequency;
   16128           0 :                 return GF_OK;
   16129             :         default:
   16130           0 :                 return GF_BAD_PARAM;
   16131             :         }
   16132           0 : }
   16133             : 
   16134             : 
   16135             : static s32 AcousticMaterial_get_field_index_by_name(char *name)
   16136             : {
   16137           0 :         if (!strcmp("ambientIntensity", name)) return 0;
   16138           0 :         if (!strcmp("diffuseColor", name)) return 1;
   16139           0 :         if (!strcmp("emissiveColor", name)) return 2;
   16140           0 :         if (!strcmp("shininess", name)) return 3;
   16141           0 :         if (!strcmp("specularColor", name)) return 4;
   16142           0 :         if (!strcmp("transparency", name)) return 5;
   16143           0 :         if (!strcmp("reffunc", name)) return 6;
   16144           0 :         if (!strcmp("transfunc", name)) return 7;
   16145           0 :         if (!strcmp("refFrequency", name)) return 8;
   16146           0 :         if (!strcmp("transFrequency", name)) return 9;
   16147           0 :         return -1;
   16148           0 : }
   16149             : static Bool AcousticMaterial_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   16150             : {
   16151           0 :         switch (FieldIndex) {
   16152             :         case 0:
   16153           0 :                 *AType = 8;
   16154           0 :                 *QType = 4;
   16155           0 :                 *b_min = FLT2FIX(0);
   16156           0 :                 *b_max = FLT2FIX(1);
   16157           0 :                 return 1;
   16158             :         case 1:
   16159           0 :                 *AType = 8;
   16160           0 :                 *QType = 4;
   16161           0 :                 *b_min = FLT2FIX(0);
   16162           0 :                 *b_max = FLT2FIX(1);
   16163           0 :                 return 1;
   16164             :         case 2:
   16165           0 :                 *AType = 8;
   16166           0 :                 *QType = 4;
   16167           0 :                 *b_min = FLT2FIX(0);
   16168           0 :                 *b_max = FLT2FIX(1);
   16169           0 :                 return 1;
   16170             :         case 3:
   16171           0 :                 *AType = 8;
   16172           0 :                 *QType = 4;
   16173           0 :                 *b_min = FLT2FIX(0);
   16174           0 :                 *b_max = FLT2FIX(1);
   16175           0 :                 return 1;
   16176             :         case 4:
   16177           0 :                 *AType = 8;
   16178           0 :                 *QType = 4;
   16179           0 :                 *b_min = FLT2FIX(0);
   16180           0 :                 *b_max = FLT2FIX(1);
   16181           0 :                 return 1;
   16182             :         case 5:
   16183           0 :                 *AType = 8;
   16184           0 :                 *QType = 4;
   16185           0 :                 *b_min = FLT2FIX(0);
   16186           0 :                 *b_max = FLT2FIX(1);
   16187           0 :                 return 1;
   16188             :         case 6:
   16189           0 :                 *AType = 0;
   16190           0 :                 *QType = 0;
   16191           0 :                 *b_min = FIX_MIN;
   16192           0 :                 *b_max = FIX_MAX;
   16193           0 :                 return 1;
   16194             :         case 7:
   16195           0 :                 *AType = 0;
   16196           0 :                 *QType = 0;
   16197           0 :                 *b_min = FIX_MIN;
   16198           0 :                 *b_max = FIX_MAX;
   16199           0 :                 return 1;
   16200             :         case 8:
   16201           0 :                 *AType = 0;
   16202           0 :                 *QType = 0;
   16203           0 :                 *b_min = FLT2FIX(0);
   16204           0 :                 *b_max = FIX_MAX;
   16205           0 :                 return 1;
   16206             :         case 9:
   16207           0 :                 *AType = 0;
   16208           0 :                 *QType = 0;
   16209           0 :                 *b_min = FLT2FIX(0);
   16210           0 :                 *b_max = FIX_MAX;
   16211           0 :                 return 1;
   16212             :         default:
   16213           0 :                 return 0;
   16214             :         }
   16215           0 : }
   16216             : 
   16217             : 
   16218             : 
   16219             : GF_Node *AcousticMaterial_Create()
   16220             : {
   16221             :         M_AcousticMaterial *p;
   16222           0 :         GF_SAFEALLOC(p, M_AcousticMaterial);
   16223           0 :         if(!p) return NULL;
   16224           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AcousticMaterial);
   16225             : 
   16226             :         /*default field values*/
   16227           0 :         p->ambientIntensity = FLT2FIX(0.2);
   16228           0 :         p->diffuseColor.red = FLT2FIX(0.8);
   16229           0 :         p->diffuseColor.green = FLT2FIX(0.8);
   16230           0 :         p->diffuseColor.blue = FLT2FIX(0.8);
   16231           0 :         p->emissiveColor.red = FLT2FIX(0);
   16232           0 :         p->emissiveColor.green = FLT2FIX(0);
   16233           0 :         p->emissiveColor.blue = FLT2FIX(0);
   16234           0 :         p->shininess = FLT2FIX(0.2);
   16235           0 :         p->specularColor.red = FLT2FIX(0);
   16236           0 :         p->specularColor.green = FLT2FIX(0);
   16237           0 :         p->specularColor.blue = FLT2FIX(0);
   16238           0 :         p->transparency = FLT2FIX(0);
   16239           0 :         p->reffunc.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16240           0 :         p->reffunc.count = 1;
   16241           0 :         p->reffunc.vals[0] = FLT2FIX(0);
   16242           0 :         p->transfunc.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16243           0 :         p->transfunc.count = 1;
   16244           0 :         p->transfunc.vals[0] = FLT2FIX(1);
   16245           0 :         p->refFrequency.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16246           0 :         p->refFrequency.count = 1;
   16247           0 :         p->refFrequency.vals[0] = FLT2FIX(0);
   16248           0 :         p->transFrequency.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16249           0 :         p->transFrequency.count = 1;
   16250           0 :         p->transFrequency.vals[0] = FLT2FIX(0);
   16251           0 :         return (GF_Node *)p;
   16252           0 : }
   16253             : 
   16254             : 
   16255             : /*
   16256             :         AcousticScene Node deletion
   16257             : */
   16258             : 
   16259             : static void AcousticScene_Del(GF_Node *node)
   16260             : {
   16261           0 :         M_AcousticScene *p = (M_AcousticScene *) node;
   16262           0 :         gf_sg_mftime_del(p->reverbTime);
   16263           0 :         gf_sg_mffloat_del(p->reverbFreq);
   16264           0 :         gf_node_free((GF_Node *) p);
   16265           0 : }
   16266             : 
   16267             : static const u16 AcousticScene_Def2All[] = { 0, 1, 2, 3, 4, 5};
   16268             : static const u16 AcousticScene_In2All[] = { 4, 5};
   16269             : static const u16 AcousticScene_Out2All[] = { 4, 5};
   16270             : static const u16 AcousticScene_Dyn2All[] = { 4};
   16271             : 
   16272             : static u32 AcousticScene_get_field_count(GF_Node *node, u8 IndexMode)
   16273             : {
   16274           0 :         switch(IndexMode) {
   16275             :         case GF_SG_FIELD_CODING_IN:
   16276           0 :                 return 2;
   16277             :         case GF_SG_FIELD_CODING_DEF:
   16278           0 :                 return 6;
   16279             :         case GF_SG_FIELD_CODING_OUT:
   16280           0 :                 return 2;
   16281             :         case GF_SG_FIELD_CODING_DYN:
   16282           0 :                 return 1;
   16283             :         default:
   16284           0 :                 return 6;
   16285             :         }
   16286           0 : }
   16287             : 
   16288             : static GF_Err AcousticScene_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   16289             : {
   16290           0 :         switch(IndexMode) {
   16291             :         case GF_SG_FIELD_CODING_IN:
   16292           0 :                 *allField = AcousticScene_In2All[inField];
   16293           0 :                 return GF_OK;
   16294             :         case GF_SG_FIELD_CODING_DEF:
   16295           0 :                 *allField = AcousticScene_Def2All[inField];
   16296           0 :                 return GF_OK;
   16297             :         case GF_SG_FIELD_CODING_OUT:
   16298           0 :                 *allField = AcousticScene_Out2All[inField];
   16299           0 :                 return GF_OK;
   16300             :         case GF_SG_FIELD_CODING_DYN:
   16301           0 :                 *allField = AcousticScene_Dyn2All[inField];
   16302           0 :                 return GF_OK;
   16303             :         default:
   16304           0 :                 return GF_BAD_PARAM;
   16305             :         }
   16306           0 : }
   16307             : static GF_Err AcousticScene_get_field(GF_Node *node, GF_FieldInfo *info)
   16308             : {
   16309           0 :         switch (info->fieldIndex) {
   16310             :         case 0:
   16311           0 :                 info->name = "center";
   16312           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   16313           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   16314           0 :                 info->far_ptr = & ((M_AcousticScene *) node)->center;
   16315           0 :                 return GF_OK;
   16316             :         case 1:
   16317           0 :                 info->name = "Size";
   16318           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   16319           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   16320           0 :                 info->far_ptr = & ((M_AcousticScene *) node)->Size;
   16321           0 :                 return GF_OK;
   16322             :         case 2:
   16323           0 :                 info->name = "reverbTime";
   16324           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   16325           0 :                 info->fieldType = GF_SG_VRML_MFTIME;
   16326           0 :                 info->far_ptr = & ((M_AcousticScene *) node)->reverbTime;
   16327           0 :                 return GF_OK;
   16328             :         case 3:
   16329           0 :                 info->name = "reverbFreq";
   16330           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   16331           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16332           0 :                 info->far_ptr = & ((M_AcousticScene *) node)->reverbFreq;
   16333           0 :                 return GF_OK;
   16334             :         case 4:
   16335           0 :                 info->name = "reverbLevel";
   16336           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16337           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   16338           0 :                 info->far_ptr = & ((M_AcousticScene *) node)->reverbLevel;
   16339           0 :                 return GF_OK;
   16340             :         case 5:
   16341           0 :                 info->name = "reverbDelay";
   16342           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16343           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   16344           0 :                 info->far_ptr = & ((M_AcousticScene *) node)->reverbDelay;
   16345           0 :                 return GF_OK;
   16346             :         default:
   16347           0 :                 return GF_BAD_PARAM;
   16348             :         }
   16349           0 : }
   16350             : 
   16351             : 
   16352             : static s32 AcousticScene_get_field_index_by_name(char *name)
   16353             : {
   16354           0 :         if (!strcmp("center", name)) return 0;
   16355           0 :         if (!strcmp("Size", name)) return 1;
   16356           0 :         if (!strcmp("reverbTime", name)) return 2;
   16357           0 :         if (!strcmp("reverbFreq", name)) return 3;
   16358           0 :         if (!strcmp("reverbLevel", name)) return 4;
   16359           0 :         if (!strcmp("reverbDelay", name)) return 5;
   16360           0 :         return -1;
   16361           0 : }
   16362             : static Bool AcousticScene_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   16363             : {
   16364           0 :         switch (FieldIndex) {
   16365             :         case 0:
   16366           0 :                 *AType = 0;
   16367           0 :                 *QType = 1;
   16368           0 :                 *b_min = FIX_MIN;
   16369           0 :                 *b_max = FIX_MAX;
   16370           0 :                 return 1;
   16371             :         case 1:
   16372           0 :                 *AType = 0;
   16373           0 :                 *QType = 11;
   16374           0 :                 *b_min = FIX_MIN;
   16375           0 :                 *b_max = FIX_MAX;
   16376           0 :                 return 1;
   16377             :         case 2:
   16378           0 :                 *AType = 0;
   16379           0 :                 *QType = 0;
   16380           0 :                 *b_min = FLT2FIX(0 );
   16381           0 :                 *b_max = FIX_MAX;
   16382           0 :                 return 1;
   16383             :         case 3:
   16384           0 :                 *AType = 0;
   16385           0 :                 *QType = 0;
   16386           0 :                 *b_min = FLT2FIX(0 );
   16387           0 :                 *b_max = FIX_MAX;
   16388           0 :                 return 1;
   16389             :         case 4:
   16390           0 :                 *AType = 7;
   16391           0 :                 *QType = 0;
   16392           0 :                 *b_min = FLT2FIX(0 );
   16393           0 :                 *b_max = FIX_MAX;
   16394           0 :                 return 1;
   16395             :         case 5:
   16396           0 :                 *AType = 0;
   16397           0 :                 *QType = 0;
   16398           0 :                 *b_min = FLT2FIX(0 );
   16399           0 :                 *b_max = FIX_MAX;
   16400           0 :                 return 1;
   16401             :         default:
   16402           0 :                 return 0;
   16403             :         }
   16404           0 : }
   16405             : 
   16406             : 
   16407             : 
   16408             : GF_Node *AcousticScene_Create()
   16409             : {
   16410             :         M_AcousticScene *p;
   16411           0 :         GF_SAFEALLOC(p, M_AcousticScene);
   16412           0 :         if(!p) return NULL;
   16413           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AcousticScene);
   16414             : 
   16415             :         /*default field values*/
   16416           0 :         p->center.x = FLT2FIX(0);
   16417           0 :         p->center.y = FLT2FIX(0);
   16418           0 :         p->center.z = FLT2FIX(0);
   16419           0 :         p->Size.x = FLT2FIX(-1);
   16420           0 :         p->Size.y = FLT2FIX(-1);
   16421           0 :         p->Size.z = FLT2FIX(-1);
   16422           0 :         p->reverbTime.vals = (SFTime*)gf_malloc(sizeof(SFTime)*1);
   16423           0 :         p->reverbTime.count = 1;
   16424           0 :         p->reverbTime.vals[0] = 0;
   16425           0 :         p->reverbFreq.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16426           0 :         p->reverbFreq.count = 1;
   16427           0 :         p->reverbFreq.vals[0] = FLT2FIX(1000);
   16428           0 :         p->reverbLevel = FLT2FIX(0.4);
   16429           0 :         p->reverbDelay = 0.5;
   16430           0 :         return (GF_Node *)p;
   16431           0 : }
   16432             : 
   16433             : 
   16434             : /*
   16435             :         ApplicationWindow Node deletion
   16436             : */
   16437             : 
   16438             : static void ApplicationWindow_Del(GF_Node *node)
   16439             : {
   16440           0 :         M_ApplicationWindow *p = (M_ApplicationWindow *) node;
   16441           0 :         gf_sg_sfstring_del(p->description);
   16442           0 :         gf_sg_mfstring_del(p->parameter);
   16443           0 :         gf_sg_mfurl_del(p->url);
   16444           0 :         gf_node_free((GF_Node *) p);
   16445           0 : }
   16446             : 
   16447             : static const u16 ApplicationWindow_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   16448             : static const u16 ApplicationWindow_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   16449             : static const u16 ApplicationWindow_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   16450             : static const u16 ApplicationWindow_Dyn2All[] = { 6};
   16451             : 
   16452             : static u32 ApplicationWindow_get_field_count(GF_Node *node, u8 IndexMode)
   16453             : {
   16454           0 :         switch(IndexMode) {
   16455             :         case GF_SG_FIELD_CODING_IN:
   16456           0 :                 return 7;
   16457             :         case GF_SG_FIELD_CODING_DEF:
   16458           0 :                 return 7;
   16459             :         case GF_SG_FIELD_CODING_OUT:
   16460           0 :                 return 7;
   16461             :         case GF_SG_FIELD_CODING_DYN:
   16462           0 :                 return 1;
   16463             :         default:
   16464           0 :                 return 7;
   16465             :         }
   16466           0 : }
   16467             : 
   16468             : static GF_Err ApplicationWindow_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   16469             : {
   16470           0 :         switch(IndexMode) {
   16471             :         case GF_SG_FIELD_CODING_IN:
   16472           0 :                 *allField = ApplicationWindow_In2All[inField];
   16473           0 :                 return GF_OK;
   16474             :         case GF_SG_FIELD_CODING_DEF:
   16475           0 :                 *allField = ApplicationWindow_Def2All[inField];
   16476           0 :                 return GF_OK;
   16477             :         case GF_SG_FIELD_CODING_OUT:
   16478           0 :                 *allField = ApplicationWindow_Out2All[inField];
   16479           0 :                 return GF_OK;
   16480             :         case GF_SG_FIELD_CODING_DYN:
   16481           0 :                 *allField = ApplicationWindow_Dyn2All[inField];
   16482           0 :                 return GF_OK;
   16483             :         default:
   16484           0 :                 return GF_BAD_PARAM;
   16485             :         }
   16486           0 : }
   16487             : static GF_Err ApplicationWindow_get_field(GF_Node *node, GF_FieldInfo *info)
   16488             : {
   16489           0 :         switch (info->fieldIndex) {
   16490             :         case 0:
   16491           0 :                 info->name = "isActive";
   16492           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16493           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   16494           0 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->isActive;
   16495           0 :                 return GF_OK;
   16496             :         case 1:
   16497           0 :                 info->name = "startTime";
   16498           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16499           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   16500           0 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->startTime;
   16501           0 :                 return GF_OK;
   16502             :         case 2:
   16503           0 :                 info->name = "stopTime";
   16504           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16505           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   16506           0 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->stopTime;
   16507           0 :                 return GF_OK;
   16508             :         case 3:
   16509           0 :                 info->name = "description";
   16510           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16511           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   16512           0 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->description;
   16513           0 :                 return GF_OK;
   16514             :         case 4:
   16515           0 :                 info->name = "parameter";
   16516           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16517           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   16518           0 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->parameter;
   16519           0 :                 return GF_OK;
   16520             :         case 5:
   16521           0 :                 info->name = "url";
   16522           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16523           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   16524           0 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->url;
   16525           0 :                 return GF_OK;
   16526             :         case 6:
   16527           0 :                 info->name = "size";
   16528           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16529           0 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   16530           0 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->size;
   16531           0 :                 return GF_OK;
   16532             :         default:
   16533           0 :                 return GF_BAD_PARAM;
   16534             :         }
   16535           0 : }
   16536             : 
   16537             : 
   16538             : static s32 ApplicationWindow_get_field_index_by_name(char *name)
   16539             : {
   16540           0 :         if (!strcmp("isActive", name)) return 0;
   16541           0 :         if (!strcmp("startTime", name)) return 1;
   16542           0 :         if (!strcmp("stopTime", name)) return 2;
   16543           0 :         if (!strcmp("description", name)) return 3;
   16544           0 :         if (!strcmp("parameter", name)) return 4;
   16545           0 :         if (!strcmp("url", name)) return 5;
   16546           0 :         if (!strcmp("size", name)) return 6;
   16547           0 :         return -1;
   16548           0 : }
   16549             : static Bool ApplicationWindow_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   16550             : {
   16551           0 :         switch (FieldIndex) {
   16552             :         case 1:
   16553           0 :                 *AType = 0;
   16554           0 :                 *QType = 0;
   16555           0 :                 *b_min = FIX_MIN;
   16556           0 :                 *b_max = FIX_MAX;
   16557           0 :                 return 1;
   16558             :         case 2:
   16559           0 :                 *AType = 0;
   16560           0 :                 *QType = 0;
   16561           0 :                 *b_min = FIX_MIN;
   16562           0 :                 *b_max = FIX_MAX;
   16563           0 :                 return 1;
   16564             :         case 6:
   16565           0 :                 *AType = 12;
   16566           0 :                 *QType = 12;
   16567           0 :                 *b_min = FIX_MIN;
   16568           0 :                 *b_max = FIX_MAX;
   16569           0 :                 return 1;
   16570             :         default:
   16571           0 :                 return 0;
   16572             :         }
   16573           0 : }
   16574             : 
   16575             : 
   16576             : 
   16577             : GF_Node *ApplicationWindow_Create()
   16578             : {
   16579             :         M_ApplicationWindow *p;
   16580           0 :         GF_SAFEALLOC(p, M_ApplicationWindow);
   16581           0 :         if(!p) return NULL;
   16582           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ApplicationWindow);
   16583             : 
   16584             :         /*default field values*/
   16585           0 :         p->startTime = 0;
   16586           0 :         p->stopTime = 0;
   16587           0 :         p->size.x = FLT2FIX(0);
   16588           0 :         p->size.y = FLT2FIX(0);
   16589           0 :         return (GF_Node *)p;
   16590           0 : }
   16591             : 
   16592             : 
   16593             : /*
   16594             :         BAP Node deletion
   16595             : */
   16596             : 
   16597             : static void BAP_Del(GF_Node *node)
   16598             : {
   16599           0 :         M_BAP *p = (M_BAP *) node;
   16600           0 :         gf_node_free((GF_Node *) p);
   16601           0 : }
   16602             : 
   16603             : static const u16 BAP_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295};
   16604             : static const u16 BAP_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295};
   16605             : static const u16 BAP_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295};
   16606             : 
   16607             : static u32 BAP_get_field_count(GF_Node *node, u8 IndexMode)
   16608             : {
   16609           0 :         switch(IndexMode) {
   16610             :         case GF_SG_FIELD_CODING_IN:
   16611           0 :                 return 296;
   16612             :         case GF_SG_FIELD_CODING_DEF:
   16613           0 :                 return 296;
   16614             :         case GF_SG_FIELD_CODING_OUT:
   16615           0 :                 return 296;
   16616             :         case GF_SG_FIELD_CODING_DYN:
   16617           0 :                 return 0;
   16618             :         default:
   16619           0 :                 return 296;
   16620             :         }
   16621           0 : }
   16622             : 
   16623             : static GF_Err BAP_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   16624             : {
   16625           0 :         switch(IndexMode) {
   16626             :         case GF_SG_FIELD_CODING_IN:
   16627           0 :                 *allField = BAP_In2All[inField];
   16628           0 :                 return GF_OK;
   16629             :         case GF_SG_FIELD_CODING_DEF:
   16630           0 :                 *allField = BAP_Def2All[inField];
   16631           0 :                 return GF_OK;
   16632             :         case GF_SG_FIELD_CODING_OUT:
   16633           0 :                 *allField = BAP_Out2All[inField];
   16634           0 :                 return GF_OK;
   16635             :         default:
   16636           0 :                 return GF_BAD_PARAM;
   16637             :         }
   16638           0 : }
   16639             : static GF_Err BAP_get_field(GF_Node *node, GF_FieldInfo *info)
   16640             : {
   16641           0 :         switch (info->fieldIndex) {
   16642             :         case 0:
   16643           0 :                 info->name = "sacroiliac_tilt";
   16644           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16645           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16646           0 :                 info->far_ptr = & ((M_BAP *) node)->sacroiliac_tilt;
   16647           0 :                 return GF_OK;
   16648             :         case 1:
   16649           0 :                 info->name = "sacroiliac_torsion";
   16650           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16651           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16652           0 :                 info->far_ptr = & ((M_BAP *) node)->sacroiliac_torsion;
   16653           0 :                 return GF_OK;
   16654             :         case 2:
   16655           0 :                 info->name = "sacroiliac_roll";
   16656           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16657           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16658           0 :                 info->far_ptr = & ((M_BAP *) node)->sacroiliac_roll;
   16659           0 :                 return GF_OK;
   16660             :         case 3:
   16661           0 :                 info->name = "l_hip_flexion";
   16662           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16663           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16664           0 :                 info->far_ptr = & ((M_BAP *) node)->l_hip_flexion;
   16665           0 :                 return GF_OK;
   16666             :         case 4:
   16667           0 :                 info->name = "r_hip_flexion";
   16668           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16669           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16670           0 :                 info->far_ptr = & ((M_BAP *) node)->r_hip_flexion;
   16671           0 :                 return GF_OK;
   16672             :         case 5:
   16673           0 :                 info->name = "l_hip_abduct";
   16674           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16675           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16676           0 :                 info->far_ptr = & ((M_BAP *) node)->l_hip_abduct;
   16677           0 :                 return GF_OK;
   16678             :         case 6:
   16679           0 :                 info->name = "r_hip_abduct";
   16680           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16681           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16682           0 :                 info->far_ptr = & ((M_BAP *) node)->r_hip_abduct;
   16683           0 :                 return GF_OK;
   16684             :         case 7:
   16685           0 :                 info->name = "l_hip_twisting";
   16686           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16687           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16688           0 :                 info->far_ptr = & ((M_BAP *) node)->l_hip_twisting;
   16689           0 :                 return GF_OK;
   16690             :         case 8:
   16691           0 :                 info->name = "r_hip_twisting";
   16692           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16693           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16694           0 :                 info->far_ptr = & ((M_BAP *) node)->r_hip_twisting;
   16695           0 :                 return GF_OK;
   16696             :         case 9:
   16697           0 :                 info->name = "l_knee_flexion";
   16698           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16699           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16700           0 :                 info->far_ptr = & ((M_BAP *) node)->l_knee_flexion;
   16701           0 :                 return GF_OK;
   16702             :         case 10:
   16703           0 :                 info->name = "r_knee_flexion";
   16704           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16705           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16706           0 :                 info->far_ptr = & ((M_BAP *) node)->r_knee_flexion;
   16707           0 :                 return GF_OK;
   16708             :         case 11:
   16709           0 :                 info->name = "l_knee_twisting";
   16710           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16711           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16712           0 :                 info->far_ptr = & ((M_BAP *) node)->l_knee_twisting;
   16713           0 :                 return GF_OK;
   16714             :         case 12:
   16715           0 :                 info->name = "r_knee_twisting";
   16716           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16717           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16718           0 :                 info->far_ptr = & ((M_BAP *) node)->r_knee_twisting;
   16719           0 :                 return GF_OK;
   16720             :         case 13:
   16721           0 :                 info->name = "l_ankle_flexion";
   16722           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16723           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16724           0 :                 info->far_ptr = & ((M_BAP *) node)->l_ankle_flexion;
   16725           0 :                 return GF_OK;
   16726             :         case 14:
   16727           0 :                 info->name = "r_ankle_flexion";
   16728           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16729           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16730           0 :                 info->far_ptr = & ((M_BAP *) node)->r_ankle_flexion;
   16731           0 :                 return GF_OK;
   16732             :         case 15:
   16733           0 :                 info->name = "l_ankle_twisting";
   16734           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16735           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16736           0 :                 info->far_ptr = & ((M_BAP *) node)->l_ankle_twisting;
   16737           0 :                 return GF_OK;
   16738             :         case 16:
   16739           0 :                 info->name = "r_ankle_twisting";
   16740           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16741           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16742           0 :                 info->far_ptr = & ((M_BAP *) node)->r_ankle_twisting;
   16743           0 :                 return GF_OK;
   16744             :         case 17:
   16745           0 :                 info->name = "l_subtalar_flexion";
   16746           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16747           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16748           0 :                 info->far_ptr = & ((M_BAP *) node)->l_subtalar_flexion;
   16749           0 :                 return GF_OK;
   16750             :         case 18:
   16751           0 :                 info->name = "r_subtalar_flexion";
   16752           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16753           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16754           0 :                 info->far_ptr = & ((M_BAP *) node)->r_subtalar_flexion;
   16755           0 :                 return GF_OK;
   16756             :         case 19:
   16757           0 :                 info->name = "l_midtarsal_flexion";
   16758           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16759           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16760           0 :                 info->far_ptr = & ((M_BAP *) node)->l_midtarsal_flexion;
   16761           0 :                 return GF_OK;
   16762             :         case 20:
   16763           0 :                 info->name = "r_midtarsal_flexion";
   16764           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16765           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16766           0 :                 info->far_ptr = & ((M_BAP *) node)->r_midtarsal_flexion;
   16767           0 :                 return GF_OK;
   16768             :         case 21:
   16769           0 :                 info->name = "l_metatarsal_flexion";
   16770           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16771           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16772           0 :                 info->far_ptr = & ((M_BAP *) node)->l_metatarsal_flexion;
   16773           0 :                 return GF_OK;
   16774             :         case 22:
   16775           0 :                 info->name = "r_metatarsal_flexion";
   16776           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16777           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16778           0 :                 info->far_ptr = & ((M_BAP *) node)->r_metatarsal_flexion;
   16779           0 :                 return GF_OK;
   16780             :         case 23:
   16781           0 :                 info->name = "l_sternoclavicular_abduct";
   16782           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16783           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16784           0 :                 info->far_ptr = & ((M_BAP *) node)->l_sternoclavicular_abduct;
   16785           0 :                 return GF_OK;
   16786             :         case 24:
   16787           0 :                 info->name = "r_sternoclavicular_abduct";
   16788           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16789           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16790           0 :                 info->far_ptr = & ((M_BAP *) node)->r_sternoclavicular_abduct;
   16791           0 :                 return GF_OK;
   16792             :         case 25:
   16793           0 :                 info->name = "l_sternoclavicular_rotate";
   16794           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16795           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16796           0 :                 info->far_ptr = & ((M_BAP *) node)->l_sternoclavicular_rotate;
   16797           0 :                 return GF_OK;
   16798             :         case 26:
   16799           0 :                 info->name = "r_sternoclavicular_rotate";
   16800           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16801           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16802           0 :                 info->far_ptr = & ((M_BAP *) node)->r_sternoclavicular_rotate;
   16803           0 :                 return GF_OK;
   16804             :         case 27:
   16805           0 :                 info->name = "l_acromioclavicular_abduct";
   16806           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16807           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16808           0 :                 info->far_ptr = & ((M_BAP *) node)->l_acromioclavicular_abduct;
   16809           0 :                 return GF_OK;
   16810             :         case 28:
   16811           0 :                 info->name = "r_acromioclavicular_abduct";
   16812           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16813           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16814           0 :                 info->far_ptr = & ((M_BAP *) node)->r_acromioclavicular_abduct;
   16815           0 :                 return GF_OK;
   16816             :         case 29:
   16817           0 :                 info->name = "l_acromioclavicular_rotate";
   16818           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16819           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16820           0 :                 info->far_ptr = & ((M_BAP *) node)->l_acromioclavicular_rotate;
   16821           0 :                 return GF_OK;
   16822             :         case 30:
   16823           0 :                 info->name = "r_acromioclavicular_rotate";
   16824           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16825           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16826           0 :                 info->far_ptr = & ((M_BAP *) node)->r_acromioclavicular_rotate;
   16827           0 :                 return GF_OK;
   16828             :         case 31:
   16829           0 :                 info->name = "l_shoulder_flexion";
   16830           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16831           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16832           0 :                 info->far_ptr = & ((M_BAP *) node)->l_shoulder_flexion;
   16833           0 :                 return GF_OK;
   16834             :         case 32:
   16835           0 :                 info->name = "r_shoulder_flexion";
   16836           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16837           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16838           0 :                 info->far_ptr = & ((M_BAP *) node)->r_shoulder_flexion;
   16839           0 :                 return GF_OK;
   16840             :         case 33:
   16841           0 :                 info->name = "l_shoulder_abduct";
   16842           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16843           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16844           0 :                 info->far_ptr = & ((M_BAP *) node)->l_shoulder_abduct;
   16845           0 :                 return GF_OK;
   16846             :         case 34:
   16847           0 :                 info->name = "r_shoulder_abduct";
   16848           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16849           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16850           0 :                 info->far_ptr = & ((M_BAP *) node)->r_shoulder_abduct;
   16851           0 :                 return GF_OK;
   16852             :         case 35:
   16853           0 :                 info->name = "l_shoulder_twisting";
   16854           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16855           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16856           0 :                 info->far_ptr = & ((M_BAP *) node)->l_shoulder_twisting;
   16857           0 :                 return GF_OK;
   16858             :         case 36:
   16859           0 :                 info->name = "r_shoulder_twisting";
   16860           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16861           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16862           0 :                 info->far_ptr = & ((M_BAP *) node)->r_shoulder_twisting;
   16863           0 :                 return GF_OK;
   16864             :         case 37:
   16865           0 :                 info->name = "l_elbow_flexion";
   16866           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16867           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16868           0 :                 info->far_ptr = & ((M_BAP *) node)->l_elbow_flexion;
   16869           0 :                 return GF_OK;
   16870             :         case 38:
   16871           0 :                 info->name = "r_elbow_flexion";
   16872           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16873           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16874           0 :                 info->far_ptr = & ((M_BAP *) node)->r_elbow_flexion;
   16875           0 :                 return GF_OK;
   16876             :         case 39:
   16877           0 :                 info->name = "l_elbow_twisting";
   16878           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16879           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16880           0 :                 info->far_ptr = & ((M_BAP *) node)->l_elbow_twisting;
   16881           0 :                 return GF_OK;
   16882             :         case 40:
   16883           0 :                 info->name = "r_elbow_twisting";
   16884           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16885           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16886           0 :                 info->far_ptr = & ((M_BAP *) node)->r_elbow_twisting;
   16887           0 :                 return GF_OK;
   16888             :         case 41:
   16889           0 :                 info->name = "l_wrist_flexion";
   16890           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16891           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16892           0 :                 info->far_ptr = & ((M_BAP *) node)->l_wrist_flexion;
   16893           0 :                 return GF_OK;
   16894             :         case 42:
   16895           0 :                 info->name = "r_wrist_flexion";
   16896           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16897           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16898           0 :                 info->far_ptr = & ((M_BAP *) node)->r_wrist_flexion;
   16899           0 :                 return GF_OK;
   16900             :         case 43:
   16901           0 :                 info->name = "l_wrist_pivot";
   16902           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16903           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16904           0 :                 info->far_ptr = & ((M_BAP *) node)->l_wrist_pivot;
   16905           0 :                 return GF_OK;
   16906             :         case 44:
   16907           0 :                 info->name = "r_wrist_pivot";
   16908           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16909           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16910           0 :                 info->far_ptr = & ((M_BAP *) node)->r_wrist_pivot;
   16911           0 :                 return GF_OK;
   16912             :         case 45:
   16913           0 :                 info->name = "l_wrist_twisting";
   16914           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16915           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16916           0 :                 info->far_ptr = & ((M_BAP *) node)->l_wrist_twisting;
   16917           0 :                 return GF_OK;
   16918             :         case 46:
   16919           0 :                 info->name = "r_wrist_twisting";
   16920           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16921           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16922           0 :                 info->far_ptr = & ((M_BAP *) node)->r_wrist_twisting;
   16923           0 :                 return GF_OK;
   16924             :         case 47:
   16925           0 :                 info->name = "skullbase_roll";
   16926           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16927           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16928           0 :                 info->far_ptr = & ((M_BAP *) node)->skullbase_roll;
   16929           0 :                 return GF_OK;
   16930             :         case 48:
   16931           0 :                 info->name = "skullbase_torsion";
   16932           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16933           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16934           0 :                 info->far_ptr = & ((M_BAP *) node)->skullbase_torsion;
   16935           0 :                 return GF_OK;
   16936             :         case 49:
   16937           0 :                 info->name = "skullbase_tilt";
   16938           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16939           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16940           0 :                 info->far_ptr = & ((M_BAP *) node)->skullbase_tilt;
   16941           0 :                 return GF_OK;
   16942             :         case 50:
   16943           0 :                 info->name = "vc1roll";
   16944           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16945           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16946           0 :                 info->far_ptr = & ((M_BAP *) node)->vc1roll;
   16947           0 :                 return GF_OK;
   16948             :         case 51:
   16949           0 :                 info->name = "vc1torsion";
   16950           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16951           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16952           0 :                 info->far_ptr = & ((M_BAP *) node)->vc1torsion;
   16953           0 :                 return GF_OK;
   16954             :         case 52:
   16955           0 :                 info->name = "vc1tilt";
   16956           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16957           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16958           0 :                 info->far_ptr = & ((M_BAP *) node)->vc1tilt;
   16959           0 :                 return GF_OK;
   16960             :         case 53:
   16961           0 :                 info->name = "vc2roll";
   16962           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16963           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16964           0 :                 info->far_ptr = & ((M_BAP *) node)->vc2roll;
   16965           0 :                 return GF_OK;
   16966             :         case 54:
   16967           0 :                 info->name = "vc2torsion";
   16968           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16969           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16970           0 :                 info->far_ptr = & ((M_BAP *) node)->vc2torsion;
   16971           0 :                 return GF_OK;
   16972             :         case 55:
   16973           0 :                 info->name = "vc2tilt";
   16974           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16975           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16976           0 :                 info->far_ptr = & ((M_BAP *) node)->vc2tilt;
   16977           0 :                 return GF_OK;
   16978             :         case 56:
   16979           0 :                 info->name = "vc3roll";
   16980           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16981           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16982           0 :                 info->far_ptr = & ((M_BAP *) node)->vc3roll;
   16983           0 :                 return GF_OK;
   16984             :         case 57:
   16985           0 :                 info->name = "vc3torsion";
   16986           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16987           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16988           0 :                 info->far_ptr = & ((M_BAP *) node)->vc3torsion;
   16989           0 :                 return GF_OK;
   16990             :         case 58:
   16991           0 :                 info->name = "vc3tilt";
   16992           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16993           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16994           0 :                 info->far_ptr = & ((M_BAP *) node)->vc3tilt;
   16995           0 :                 return GF_OK;
   16996             :         case 59:
   16997           0 :                 info->name = "vc4roll";
   16998           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16999           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17000           0 :                 info->far_ptr = & ((M_BAP *) node)->vc4roll;
   17001           0 :                 return GF_OK;
   17002             :         case 60:
   17003           0 :                 info->name = "vc4torsion";
   17004           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17005           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17006           0 :                 info->far_ptr = & ((M_BAP *) node)->vc4torsion;
   17007           0 :                 return GF_OK;
   17008             :         case 61:
   17009           0 :                 info->name = "vc4tilt";
   17010           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17011           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17012           0 :                 info->far_ptr = & ((M_BAP *) node)->vc4tilt;
   17013           0 :                 return GF_OK;
   17014             :         case 62:
   17015           0 :                 info->name = "vc5roll";
   17016           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17017           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17018           0 :                 info->far_ptr = & ((M_BAP *) node)->vc5roll;
   17019           0 :                 return GF_OK;
   17020             :         case 63:
   17021           0 :                 info->name = "vc5torsion";
   17022           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17023           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17024           0 :                 info->far_ptr = & ((M_BAP *) node)->vc5torsion;
   17025           0 :                 return GF_OK;
   17026             :         case 64:
   17027           0 :                 info->name = "vc5tilt";
   17028           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17029           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17030           0 :                 info->far_ptr = & ((M_BAP *) node)->vc5tilt;
   17031           0 :                 return GF_OK;
   17032             :         case 65:
   17033           0 :                 info->name = "vc6roll";
   17034           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17035           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17036           0 :                 info->far_ptr = & ((M_BAP *) node)->vc6roll;
   17037           0 :                 return GF_OK;
   17038             :         case 66:
   17039           0 :                 info->name = "vc6torsion";
   17040           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17041           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17042           0 :                 info->far_ptr = & ((M_BAP *) node)->vc6torsion;
   17043           0 :                 return GF_OK;
   17044             :         case 67:
   17045           0 :                 info->name = "vc6tilt";
   17046           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17047           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17048           0 :                 info->far_ptr = & ((M_BAP *) node)->vc6tilt;
   17049           0 :                 return GF_OK;
   17050             :         case 68:
   17051           0 :                 info->name = "vc7roll";
   17052           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17053           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17054           0 :                 info->far_ptr = & ((M_BAP *) node)->vc7roll;
   17055           0 :                 return GF_OK;
   17056             :         case 69:
   17057           0 :                 info->name = "vc7torsion";
   17058           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17059           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17060           0 :                 info->far_ptr = & ((M_BAP *) node)->vc7torsion;
   17061           0 :                 return GF_OK;
   17062             :         case 70:
   17063           0 :                 info->name = "vc7tilt";
   17064           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17065           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17066           0 :                 info->far_ptr = & ((M_BAP *) node)->vc7tilt;
   17067           0 :                 return GF_OK;
   17068             :         case 71:
   17069           0 :                 info->name = "vt1roll";
   17070           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17071           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17072           0 :                 info->far_ptr = & ((M_BAP *) node)->vt1roll;
   17073           0 :                 return GF_OK;
   17074             :         case 72:
   17075           0 :                 info->name = "vt1torsion";
   17076           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17077           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17078           0 :                 info->far_ptr = & ((M_BAP *) node)->vt1torsion;
   17079           0 :                 return GF_OK;
   17080             :         case 73:
   17081           0 :                 info->name = "vt1tilt";
   17082           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17083           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17084           0 :                 info->far_ptr = & ((M_BAP *) node)->vt1tilt;
   17085           0 :                 return GF_OK;
   17086             :         case 74:
   17087           0 :                 info->name = "vt2roll";
   17088           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17089           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17090           0 :                 info->far_ptr = & ((M_BAP *) node)->vt2roll;
   17091           0 :                 return GF_OK;
   17092             :         case 75:
   17093           0 :                 info->name = "vt2torsion";
   17094           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17095           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17096           0 :                 info->far_ptr = & ((M_BAP *) node)->vt2torsion;
   17097           0 :                 return GF_OK;
   17098             :         case 76:
   17099           0 :                 info->name = "vt2tilt";
   17100           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17101           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17102           0 :                 info->far_ptr = & ((M_BAP *) node)->vt2tilt;
   17103           0 :                 return GF_OK;
   17104             :         case 77:
   17105           0 :                 info->name = "vt3roll";
   17106           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17107           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17108           0 :                 info->far_ptr = & ((M_BAP *) node)->vt3roll;
   17109           0 :                 return GF_OK;
   17110             :         case 78:
   17111           0 :                 info->name = "vt3torsion";
   17112           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17113           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17114           0 :                 info->far_ptr = & ((M_BAP *) node)->vt3torsion;
   17115           0 :                 return GF_OK;
   17116             :         case 79:
   17117           0 :                 info->name = "vt3tilt";
   17118           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17119           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17120           0 :                 info->far_ptr = & ((M_BAP *) node)->vt3tilt;
   17121           0 :                 return GF_OK;
   17122             :         case 80:
   17123           0 :                 info->name = "vt4roll";
   17124           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17125           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17126           0 :                 info->far_ptr = & ((M_BAP *) node)->vt4roll;
   17127           0 :                 return GF_OK;
   17128             :         case 81:
   17129           0 :                 info->name = "vt4torsion";
   17130           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17131           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17132           0 :                 info->far_ptr = & ((M_BAP *) node)->vt4torsion;
   17133           0 :                 return GF_OK;
   17134             :         case 82:
   17135           0 :                 info->name = "vt4tilt";
   17136           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17137           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17138           0 :                 info->far_ptr = & ((M_BAP *) node)->vt4tilt;
   17139           0 :                 return GF_OK;
   17140             :         case 83:
   17141           0 :                 info->name = "vt5roll";
   17142           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17143           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17144           0 :                 info->far_ptr = & ((M_BAP *) node)->vt5roll;
   17145           0 :                 return GF_OK;
   17146             :         case 84:
   17147           0 :                 info->name = "vt5torsion";
   17148           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17149           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17150           0 :                 info->far_ptr = & ((M_BAP *) node)->vt5torsion;
   17151           0 :                 return GF_OK;
   17152             :         case 85:
   17153           0 :                 info->name = "vt5tilt";
   17154           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17155           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17156           0 :                 info->far_ptr = & ((M_BAP *) node)->vt5tilt;
   17157           0 :                 return GF_OK;
   17158             :         case 86:
   17159           0 :                 info->name = "vt6roll";
   17160           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17161           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17162           0 :                 info->far_ptr = & ((M_BAP *) node)->vt6roll;
   17163           0 :                 return GF_OK;
   17164             :         case 87:
   17165           0 :                 info->name = "vt6torsion";
   17166           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17167           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17168           0 :                 info->far_ptr = & ((M_BAP *) node)->vt6torsion;
   17169           0 :                 return GF_OK;
   17170             :         case 88:
   17171           0 :                 info->name = "vt6tilt";
   17172           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17173           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17174           0 :                 info->far_ptr = & ((M_BAP *) node)->vt6tilt;
   17175           0 :                 return GF_OK;
   17176             :         case 89:
   17177           0 :                 info->name = "vt7roll";
   17178           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17179           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17180           0 :                 info->far_ptr = & ((M_BAP *) node)->vt7roll;
   17181           0 :                 return GF_OK;
   17182             :         case 90:
   17183           0 :                 info->name = "vt7torsion";
   17184           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17185           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17186           0 :                 info->far_ptr = & ((M_BAP *) node)->vt7torsion;
   17187           0 :                 return GF_OK;
   17188             :         case 91:
   17189           0 :                 info->name = "vt7tilt";
   17190           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17191           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17192           0 :                 info->far_ptr = & ((M_BAP *) node)->vt7tilt;
   17193           0 :                 return GF_OK;
   17194             :         case 92:
   17195           0 :                 info->name = "vt8roll";
   17196           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17197           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17198           0 :                 info->far_ptr = & ((M_BAP *) node)->vt8roll;
   17199           0 :                 return GF_OK;
   17200             :         case 93:
   17201           0 :                 info->name = "vt8torsion";
   17202           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17203           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17204           0 :                 info->far_ptr = & ((M_BAP *) node)->vt8torsion;
   17205           0 :                 return GF_OK;
   17206             :         case 94:
   17207           0 :                 info->name = "vt8tilt";
   17208           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17209           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17210           0 :                 info->far_ptr = & ((M_BAP *) node)->vt8tilt;
   17211           0 :                 return GF_OK;
   17212             :         case 95:
   17213           0 :                 info->name = "vt9roll";
   17214           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17215           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17216           0 :                 info->far_ptr = & ((M_BAP *) node)->vt9roll;
   17217           0 :                 return GF_OK;
   17218             :         case 96:
   17219           0 :                 info->name = "vt9torsion";
   17220           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17221           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17222           0 :                 info->far_ptr = & ((M_BAP *) node)->vt9torsion;
   17223           0 :                 return GF_OK;
   17224             :         case 97:
   17225           0 :                 info->name = "vt9tilt";
   17226           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17227           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17228           0 :                 info->far_ptr = & ((M_BAP *) node)->vt9tilt;
   17229           0 :                 return GF_OK;
   17230             :         case 98:
   17231           0 :                 info->name = "vt10roll";
   17232           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17233           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17234           0 :                 info->far_ptr = & ((M_BAP *) node)->vt10roll;
   17235           0 :                 return GF_OK;
   17236             :         case 99:
   17237           0 :                 info->name = "vt10torsion";
   17238           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17239           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17240           0 :                 info->far_ptr = & ((M_BAP *) node)->vt10torsion;
   17241           0 :                 return GF_OK;
   17242             :         case 100:
   17243           0 :                 info->name = "vt10tilt";
   17244           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17245           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17246           0 :                 info->far_ptr = & ((M_BAP *) node)->vt10tilt;
   17247           0 :                 return GF_OK;
   17248             :         case 101:
   17249           0 :                 info->name = "vt11roll";
   17250           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17251           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17252           0 :                 info->far_ptr = & ((M_BAP *) node)->vt11roll;
   17253           0 :                 return GF_OK;
   17254             :         case 102:
   17255           0 :                 info->name = "vt11torsion";
   17256           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17257           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17258           0 :                 info->far_ptr = & ((M_BAP *) node)->vt11torsion;
   17259           0 :                 return GF_OK;
   17260             :         case 103:
   17261           0 :                 info->name = "vt11tilt";
   17262           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17263           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17264           0 :                 info->far_ptr = & ((M_BAP *) node)->vt11tilt;
   17265           0 :                 return GF_OK;
   17266             :         case 104:
   17267           0 :                 info->name = "vt12roll";
   17268           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17269           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17270           0 :                 info->far_ptr = & ((M_BAP *) node)->vt12roll;
   17271           0 :                 return GF_OK;
   17272             :         case 105:
   17273           0 :                 info->name = "vt12torsion";
   17274           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17275           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17276           0 :                 info->far_ptr = & ((M_BAP *) node)->vt12torsion;
   17277           0 :                 return GF_OK;
   17278             :         case 106:
   17279           0 :                 info->name = "vt12tilt";
   17280           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17281           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17282           0 :                 info->far_ptr = & ((M_BAP *) node)->vt12tilt;
   17283           0 :                 return GF_OK;
   17284             :         case 107:
   17285           0 :                 info->name = "vl1roll";
   17286           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17287           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17288           0 :                 info->far_ptr = & ((M_BAP *) node)->vl1roll;
   17289           0 :                 return GF_OK;
   17290             :         case 108:
   17291           0 :                 info->name = "vl1torsion";
   17292           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17293           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17294           0 :                 info->far_ptr = & ((M_BAP *) node)->vl1torsion;
   17295           0 :                 return GF_OK;
   17296             :         case 109:
   17297           0 :                 info->name = "vl1tilt";
   17298           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17299           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17300           0 :                 info->far_ptr = & ((M_BAP *) node)->vl1tilt;
   17301           0 :                 return GF_OK;
   17302             :         case 110:
   17303           0 :                 info->name = "vl2roll";
   17304           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17305           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17306           0 :                 info->far_ptr = & ((M_BAP *) node)->vl2roll;
   17307           0 :                 return GF_OK;
   17308             :         case 111:
   17309           0 :                 info->name = "vl2torsion";
   17310           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17311           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17312           0 :                 info->far_ptr = & ((M_BAP *) node)->vl2torsion;
   17313           0 :                 return GF_OK;
   17314             :         case 112:
   17315           0 :                 info->name = "vl2tilt";
   17316           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17317           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17318           0 :                 info->far_ptr = & ((M_BAP *) node)->vl2tilt;
   17319           0 :                 return GF_OK;
   17320             :         case 113:
   17321           0 :                 info->name = "vl3roll";
   17322           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17323           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17324           0 :                 info->far_ptr = & ((M_BAP *) node)->vl3roll;
   17325           0 :                 return GF_OK;
   17326             :         case 114:
   17327           0 :                 info->name = "vl3torsion";
   17328           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17329           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17330           0 :                 info->far_ptr = & ((M_BAP *) node)->vl3torsion;
   17331           0 :                 return GF_OK;
   17332             :         case 115:
   17333           0 :                 info->name = "vl3tilt";
   17334           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17335           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17336           0 :                 info->far_ptr = & ((M_BAP *) node)->vl3tilt;
   17337           0 :                 return GF_OK;
   17338             :         case 116:
   17339           0 :                 info->name = "vl4roll";
   17340           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17341           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17342           0 :                 info->far_ptr = & ((M_BAP *) node)->vl4roll;
   17343           0 :                 return GF_OK;
   17344             :         case 117:
   17345           0 :                 info->name = "vl4torsion";
   17346           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17347           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17348           0 :                 info->far_ptr = & ((M_BAP *) node)->vl4torsion;
   17349           0 :                 return GF_OK;
   17350             :         case 118:
   17351           0 :                 info->name = "vl4tilt";
   17352           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17353           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17354           0 :                 info->far_ptr = & ((M_BAP *) node)->vl4tilt;
   17355           0 :                 return GF_OK;
   17356             :         case 119:
   17357           0 :                 info->name = "vl5roll";
   17358           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17359           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17360           0 :                 info->far_ptr = & ((M_BAP *) node)->vl5roll;
   17361           0 :                 return GF_OK;
   17362             :         case 120:
   17363           0 :                 info->name = "vl5torsion";
   17364           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17365           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17366           0 :                 info->far_ptr = & ((M_BAP *) node)->vl5torsion;
   17367           0 :                 return GF_OK;
   17368             :         case 121:
   17369           0 :                 info->name = "vl5tilt";
   17370           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17371           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17372           0 :                 info->far_ptr = & ((M_BAP *) node)->vl5tilt;
   17373           0 :                 return GF_OK;
   17374             :         case 122:
   17375           0 :                 info->name = "l_pinky0_flexion";
   17376           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17377           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17378           0 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky0_flexion;
   17379           0 :                 return GF_OK;
   17380             :         case 123:
   17381           0 :                 info->name = "r_pinky0_flexion";
   17382           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17383           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17384           0 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky0_flexion;
   17385           0 :                 return GF_OK;
   17386             :         case 124:
   17387           0 :                 info->name = "l_pinky1_flexion";
   17388           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17389           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17390           0 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky1_flexion;
   17391           0 :                 return GF_OK;
   17392             :         case 125:
   17393           0 :                 info->name = "r_pinky1_flexion";
   17394           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17395           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17396           0 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky1_flexion;
   17397           0 :                 return GF_OK;
   17398             :         case 126:
   17399           0 :                 info->name = "l_pinky1_pivot";
   17400           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17401           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17402           0 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky1_pivot;
   17403           0 :                 return GF_OK;
   17404             :         case 127:
   17405           0 :                 info->name = "r_pinky1_pivot";
   17406           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17407           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17408           0 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky1_pivot;
   17409           0 :                 return GF_OK;
   17410             :         case 128:
   17411           0 :                 info->name = "l_pinky1_twisting";
   17412           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17413           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17414           0 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky1_twisting;
   17415           0 :                 return GF_OK;
   17416             :         case 129:
   17417           0 :                 info->name = "r_pinky1_twisting";
   17418           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17419           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17420           0 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky1_twisting;
   17421           0 :                 return GF_OK;
   17422             :         case 130:
   17423           0 :                 info->name = "l_pinky2_flexion";
   17424           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17425           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17426           0 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky2_flexion;
   17427           0 :                 return GF_OK;
   17428             :         case 131:
   17429           0 :                 info->name = "r_pinky2_flexion";
   17430           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17431           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17432           0 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky2_flexion;
   17433           0 :                 return GF_OK;
   17434             :         case 132:
   17435           0 :                 info->name = "l_pinky3_flexion";
   17436           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17437           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17438           0 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky3_flexion;
   17439           0 :                 return GF_OK;
   17440             :         case 133:
   17441           0 :                 info->name = "r_pinky3_flexion";
   17442           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17443           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17444           0 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky3_flexion;
   17445           0 :                 return GF_OK;
   17446             :         case 134:
   17447           0 :                 info->name = "l_ring0_flexion";
   17448           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17449           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17450           0 :                 info->far_ptr = & ((M_BAP *) node)->l_ring0_flexion;
   17451           0 :                 return GF_OK;
   17452             :         case 135:
   17453           0 :                 info->name = "r_ring0_flexion";
   17454           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17455           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17456           0 :                 info->far_ptr = & ((M_BAP *) node)->r_ring0_flexion;
   17457           0 :                 return GF_OK;
   17458             :         case 136:
   17459           0 :                 info->name = "l_ring1_flexion";
   17460           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17461           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17462           0 :                 info->far_ptr = & ((M_BAP *) node)->l_ring1_flexion;
   17463           0 :                 return GF_OK;
   17464             :         case 137:
   17465           0 :                 info->name = "r_ring1_flexion";
   17466           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17467           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17468           0 :                 info->far_ptr = & ((M_BAP *) node)->r_ring1_flexion;
   17469           0 :                 return GF_OK;
   17470             :         case 138:
   17471           0 :                 info->name = "l_ring1_pivot";
   17472           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17473           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17474           0 :                 info->far_ptr = & ((M_BAP *) node)->l_ring1_pivot;
   17475           0 :                 return GF_OK;
   17476             :         case 139:
   17477           0 :                 info->name = "r_ring1_pivot";
   17478           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17479           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17480           0 :                 info->far_ptr = & ((M_BAP *) node)->r_ring1_pivot;
   17481           0 :                 return GF_OK;
   17482             :         case 140:
   17483           0 :                 info->name = "l_ring1_twisting";
   17484           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17485           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17486           0 :                 info->far_ptr = & ((M_BAP *) node)->l_ring1_twisting;
   17487           0 :                 return GF_OK;
   17488             :         case 141:
   17489           0 :                 info->name = "r_ring1_twisting";
   17490           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17491           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17492           0 :                 info->far_ptr = & ((M_BAP *) node)->r_ring1_twisting;
   17493           0 :                 return GF_OK;
   17494             :         case 142:
   17495           0 :                 info->name = "l_ring2_flexion";
   17496           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17497           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17498           0 :                 info->far_ptr = & ((M_BAP *) node)->l_ring2_flexion;
   17499           0 :                 return GF_OK;
   17500             :         case 143:
   17501           0 :                 info->name = "r_ring2_flexion";
   17502           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17503           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17504           0 :                 info->far_ptr = & ((M_BAP *) node)->r_ring2_flexion;
   17505           0 :                 return GF_OK;
   17506             :         case 144:
   17507           0 :                 info->name = "l_ring3_flexion";
   17508           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17509           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17510           0 :                 info->far_ptr = & ((M_BAP *) node)->l_ring3_flexion;
   17511           0 :                 return GF_OK;
   17512             :         case 145:
   17513           0 :                 info->name = "r_ring3_flexion";
   17514           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17515           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17516           0 :                 info->far_ptr = & ((M_BAP *) node)->r_ring3_flexion;
   17517           0 :                 return GF_OK;
   17518             :         case 146:
   17519           0 :                 info->name = "l_middle0_flexion";
   17520           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17521           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17522           0 :                 info->far_ptr = & ((M_BAP *) node)->l_middle0_flexion;
   17523           0 :                 return GF_OK;
   17524             :         case 147:
   17525           0 :                 info->name = "r_middle0_flexion";
   17526           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17527           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17528           0 :                 info->far_ptr = & ((M_BAP *) node)->r_middle0_flexion;
   17529           0 :                 return GF_OK;
   17530             :         case 148:
   17531           0 :                 info->name = "l_middle1_flexion";
   17532           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17533           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17534           0 :                 info->far_ptr = & ((M_BAP *) node)->l_middle1_flexion;
   17535           0 :                 return GF_OK;
   17536             :         case 149:
   17537           0 :                 info->name = "r_middle1_flexion";
   17538           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17539           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17540           0 :                 info->far_ptr = & ((M_BAP *) node)->r_middle1_flexion;
   17541           0 :                 return GF_OK;
   17542             :         case 150:
   17543           0 :                 info->name = "l_middle1_pivot";
   17544           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17545           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17546           0 :                 info->far_ptr = & ((M_BAP *) node)->l_middle1_pivot;
   17547           0 :                 return GF_OK;
   17548             :         case 151:
   17549           0 :                 info->name = "r_middle1_pivot";
   17550           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17551           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17552           0 :                 info->far_ptr = & ((M_BAP *) node)->r_middle1_pivot;
   17553           0 :                 return GF_OK;
   17554             :         case 152:
   17555           0 :                 info->name = "l_middle1_twisting";
   17556           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17557           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17558           0 :                 info->far_ptr = & ((M_BAP *) node)->l_middle1_twisting;
   17559           0 :                 return GF_OK;
   17560             :         case 153:
   17561           0 :                 info->name = "r_middle1_twisting";
   17562           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17563           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17564           0 :                 info->far_ptr = & ((M_BAP *) node)->r_middle1_twisting;
   17565           0 :                 return GF_OK;
   17566             :         case 154:
   17567           0 :                 info->name = "l_middle2_flexion";
   17568           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17569           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17570           0 :                 info->far_ptr = & ((M_BAP *) node)->l_middle2_flexion;
   17571           0 :                 return GF_OK;
   17572             :         case 155:
   17573           0 :                 info->name = "r_middle2_flexion";
   17574           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17575           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17576           0 :                 info->far_ptr = & ((M_BAP *) node)->r_middle2_flexion;
   17577           0 :                 return GF_OK;
   17578             :         case 156:
   17579           0 :                 info->name = "l_middle3_flexion";
   17580           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17581           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17582           0 :                 info->far_ptr = & ((M_BAP *) node)->l_middle3_flexion;
   17583           0 :                 return GF_OK;
   17584             :         case 157:
   17585           0 :                 info->name = "r_middle3_flexion";
   17586           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17587           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17588           0 :                 info->far_ptr = & ((M_BAP *) node)->r_middle3_flexion;
   17589           0 :                 return GF_OK;
   17590             :         case 158:
   17591           0 :                 info->name = "l_index0_flexion";
   17592           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17593           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17594           0 :                 info->far_ptr = & ((M_BAP *) node)->l_index0_flexion;
   17595           0 :                 return GF_OK;
   17596             :         case 159:
   17597           0 :                 info->name = "r_index0_flexion";
   17598           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17599           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17600           0 :                 info->far_ptr = & ((M_BAP *) node)->r_index0_flexion;
   17601           0 :                 return GF_OK;
   17602             :         case 160:
   17603           0 :                 info->name = "l_index1_flexion";
   17604           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17605           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17606           0 :                 info->far_ptr = & ((M_BAP *) node)->l_index1_flexion;
   17607           0 :                 return GF_OK;
   17608             :         case 161:
   17609           0 :                 info->name = "r_index1_flexion";
   17610           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17611           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17612           0 :                 info->far_ptr = & ((M_BAP *) node)->r_index1_flexion;
   17613           0 :                 return GF_OK;
   17614             :         case 162:
   17615           0 :                 info->name = "l_index1_pivot";
   17616           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17617           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17618           0 :                 info->far_ptr = & ((M_BAP *) node)->l_index1_pivot;
   17619           0 :                 return GF_OK;
   17620             :         case 163:
   17621           0 :                 info->name = "r_index1_pivot";
   17622           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17623           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17624           0 :                 info->far_ptr = & ((M_BAP *) node)->r_index1_pivot;
   17625           0 :                 return GF_OK;
   17626             :         case 164:
   17627           0 :                 info->name = "l_index1_twisting";
   17628           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17629           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17630           0 :                 info->far_ptr = & ((M_BAP *) node)->l_index1_twisting;
   17631           0 :                 return GF_OK;
   17632             :         case 165:
   17633           0 :                 info->name = "r_index1_twisting";
   17634           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17635           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17636           0 :                 info->far_ptr = & ((M_BAP *) node)->r_index1_twisting;
   17637           0 :                 return GF_OK;
   17638             :         case 166:
   17639           0 :                 info->name = "l_index2_flexion";
   17640           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17641           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17642           0 :                 info->far_ptr = & ((M_BAP *) node)->l_index2_flexion;
   17643           0 :                 return GF_OK;
   17644             :         case 167:
   17645           0 :                 info->name = "r_index2_flexion";
   17646           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17647           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17648           0 :                 info->far_ptr = & ((M_BAP *) node)->r_index2_flexion;
   17649           0 :                 return GF_OK;
   17650             :         case 168:
   17651           0 :                 info->name = "l_index3_flexion";
   17652           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17653           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17654           0 :                 info->far_ptr = & ((M_BAP *) node)->l_index3_flexion;
   17655           0 :                 return GF_OK;
   17656             :         case 169:
   17657           0 :                 info->name = "r_index3_flexion";
   17658           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17659           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17660           0 :                 info->far_ptr = & ((M_BAP *) node)->r_index3_flexion;
   17661           0 :                 return GF_OK;
   17662             :         case 170:
   17663           0 :                 info->name = "l_thumb1_flexion";
   17664           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17665           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17666           0 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb1_flexion;
   17667           0 :                 return GF_OK;
   17668             :         case 171:
   17669           0 :                 info->name = "r_thumb1_flexion";
   17670           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17671           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17672           0 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb1_flexion;
   17673           0 :                 return GF_OK;
   17674             :         case 172:
   17675           0 :                 info->name = "l_thumb1_pivot";
   17676           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17677           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17678           0 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb1_pivot;
   17679           0 :                 return GF_OK;
   17680             :         case 173:
   17681           0 :                 info->name = "r_thumb1_pivot";
   17682           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17683           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17684           0 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb1_pivot;
   17685           0 :                 return GF_OK;
   17686             :         case 174:
   17687           0 :                 info->name = "l_thumb1_twisting";
   17688           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17689           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17690           0 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb1_twisting;
   17691           0 :                 return GF_OK;
   17692             :         case 175:
   17693           0 :                 info->name = "r_thumb1_twisting";
   17694           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17695           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17696           0 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb1_twisting;
   17697           0 :                 return GF_OK;
   17698             :         case 176:
   17699           0 :                 info->name = "l_thumb2_flexion";
   17700           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17701           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17702           0 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb2_flexion;
   17703           0 :                 return GF_OK;
   17704             :         case 177:
   17705           0 :                 info->name = "r_thumb2_flexion";
   17706           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17707           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17708           0 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb2_flexion;
   17709           0 :                 return GF_OK;
   17710             :         case 178:
   17711           0 :                 info->name = "l_thumb3_flexion";
   17712           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17713           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17714           0 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb3_flexion;
   17715           0 :                 return GF_OK;
   17716             :         case 179:
   17717           0 :                 info->name = "r_thumb3_flexion";
   17718           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17719           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17720           0 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb3_flexion;
   17721           0 :                 return GF_OK;
   17722             :         case 180:
   17723           0 :                 info->name = "HumanoidRoot_tr_vertical";
   17724           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17725           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17726           0 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_tr_vertical;
   17727           0 :                 return GF_OK;
   17728             :         case 181:
   17729           0 :                 info->name = "HumanoidRoot_tr_lateral";
   17730           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17731           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17732           0 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_tr_lateral;
   17733           0 :                 return GF_OK;
   17734             :         case 182:
   17735           0 :                 info->name = "HumanoidRoot_tr_frontal";
   17736           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17737           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17738           0 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_tr_frontal;
   17739           0 :                 return GF_OK;
   17740             :         case 183:
   17741           0 :                 info->name = "HumanoidRoot_rt_body_turn";
   17742           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17743           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17744           0 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_rt_body_turn;
   17745           0 :                 return GF_OK;
   17746             :         case 184:
   17747           0 :                 info->name = "HumanoidRoot_rt_body_roll";
   17748           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17749           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17750           0 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_rt_body_roll;
   17751           0 :                 return GF_OK;
   17752             :         case 185:
   17753           0 :                 info->name = "HumanoidRoot_rt_body_tilt";
   17754           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17755           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17756           0 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_rt_body_tilt;
   17757           0 :                 return GF_OK;
   17758             :         case 186:
   17759           0 :                 info->name = "extensionBap187";
   17760           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17761           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17762           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap187;
   17763           0 :                 return GF_OK;
   17764             :         case 187:
   17765           0 :                 info->name = "extensionBap188";
   17766           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17767           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17768           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap188;
   17769           0 :                 return GF_OK;
   17770             :         case 188:
   17771           0 :                 info->name = "extensionBap189";
   17772           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17773           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17774           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap189;
   17775           0 :                 return GF_OK;
   17776             :         case 189:
   17777           0 :                 info->name = "extensionBap190";
   17778           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17779           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17780           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap190;
   17781           0 :                 return GF_OK;
   17782             :         case 190:
   17783           0 :                 info->name = "extensionBap191";
   17784           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17785           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17786           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap191;
   17787           0 :                 return GF_OK;
   17788             :         case 191:
   17789           0 :                 info->name = "extensionBap192";
   17790           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17791           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17792           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap192;
   17793           0 :                 return GF_OK;
   17794             :         case 192:
   17795           0 :                 info->name = "extensionBap193";
   17796           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17797           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17798           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap193;
   17799           0 :                 return GF_OK;
   17800             :         case 193:
   17801           0 :                 info->name = "extensionBap194";
   17802           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17803           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17804           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap194;
   17805           0 :                 return GF_OK;
   17806             :         case 194:
   17807           0 :                 info->name = "extensionBap195";
   17808           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17809           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17810           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap195;
   17811           0 :                 return GF_OK;
   17812             :         case 195:
   17813           0 :                 info->name = "extensionBap196";
   17814           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17815           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17816           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap196;
   17817           0 :                 return GF_OK;
   17818             :         case 196:
   17819           0 :                 info->name = "extensionBap197";
   17820           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17821           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17822           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap197;
   17823           0 :                 return GF_OK;
   17824             :         case 197:
   17825           0 :                 info->name = "extensionBap198";
   17826           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17827           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17828           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap198;
   17829           0 :                 return GF_OK;
   17830             :         case 198:
   17831           0 :                 info->name = "extensionBap199";
   17832           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17833           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17834           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap199;
   17835           0 :                 return GF_OK;
   17836             :         case 199:
   17837           0 :                 info->name = "extensionBap200";
   17838           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17839           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17840           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap200;
   17841           0 :                 return GF_OK;
   17842             :         case 200:
   17843           0 :                 info->name = "extensionBap201";
   17844           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17845           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17846           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap201;
   17847           0 :                 return GF_OK;
   17848             :         case 201:
   17849           0 :                 info->name = "extensionBap202";
   17850           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17851           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17852           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap202;
   17853           0 :                 return GF_OK;
   17854             :         case 202:
   17855           0 :                 info->name = "extensionBap203";
   17856           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17857           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17858           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap203;
   17859           0 :                 return GF_OK;
   17860             :         case 203:
   17861           0 :                 info->name = "extensionBap204";
   17862           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17863           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17864           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap204;
   17865           0 :                 return GF_OK;
   17866             :         case 204:
   17867           0 :                 info->name = "extensionBap205";
   17868           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17869           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17870           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap205;
   17871           0 :                 return GF_OK;
   17872             :         case 205:
   17873           0 :                 info->name = "extensionBap206";
   17874           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17875           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17876           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap206;
   17877           0 :                 return GF_OK;
   17878             :         case 206:
   17879           0 :                 info->name = "extensionBap207";
   17880           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17881           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17882           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap207;
   17883           0 :                 return GF_OK;
   17884             :         case 207:
   17885           0 :                 info->name = "extensionBap208";
   17886           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17887           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17888           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap208;
   17889           0 :                 return GF_OK;
   17890             :         case 208:
   17891           0 :                 info->name = "extensionBap209";
   17892           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17893           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17894           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap209;
   17895           0 :                 return GF_OK;
   17896             :         case 209:
   17897           0 :                 info->name = "extensionBap210";
   17898           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17899           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17900           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap210;
   17901           0 :                 return GF_OK;
   17902             :         case 210:
   17903           0 :                 info->name = "extensionBap211";
   17904           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17905           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17906           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap211;
   17907           0 :                 return GF_OK;
   17908             :         case 211:
   17909           0 :                 info->name = "extensionBap212";
   17910           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17911           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17912           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap212;
   17913           0 :                 return GF_OK;
   17914             :         case 212:
   17915           0 :                 info->name = "extensionBap213";
   17916           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17917           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17918           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap213;
   17919           0 :                 return GF_OK;
   17920             :         case 213:
   17921           0 :                 info->name = "extensionBap214";
   17922           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17923           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17924           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap214;
   17925           0 :                 return GF_OK;
   17926             :         case 214:
   17927           0 :                 info->name = "extensionBap215";
   17928           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17929           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17930           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap215;
   17931           0 :                 return GF_OK;
   17932             :         case 215:
   17933           0 :                 info->name = "extensionBap216";
   17934           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17935           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17936           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap216;
   17937           0 :                 return GF_OK;
   17938             :         case 216:
   17939           0 :                 info->name = "extensionBap217";
   17940           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17941           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17942           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap217;
   17943           0 :                 return GF_OK;
   17944             :         case 217:
   17945           0 :                 info->name = "extensionBap218";
   17946           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17947           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17948           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap218;
   17949           0 :                 return GF_OK;
   17950             :         case 218:
   17951           0 :                 info->name = "extensionBap219";
   17952           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17953           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17954           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap219;
   17955           0 :                 return GF_OK;
   17956             :         case 219:
   17957           0 :                 info->name = "extensionBap220";
   17958           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17959           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17960           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap220;
   17961           0 :                 return GF_OK;
   17962             :         case 220:
   17963           0 :                 info->name = "extensionBap221";
   17964           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17965           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17966           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap221;
   17967           0 :                 return GF_OK;
   17968             :         case 221:
   17969           0 :                 info->name = "extensionBap222";
   17970           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17971           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17972           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap222;
   17973           0 :                 return GF_OK;
   17974             :         case 222:
   17975           0 :                 info->name = "extensionBap223";
   17976           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17977           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17978           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap223;
   17979           0 :                 return GF_OK;
   17980             :         case 223:
   17981           0 :                 info->name = "extensionBap224";
   17982           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17983           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17984           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap224;
   17985           0 :                 return GF_OK;
   17986             :         case 224:
   17987           0 :                 info->name = "extensionBap225";
   17988           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17989           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17990           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap225;
   17991           0 :                 return GF_OK;
   17992             :         case 225:
   17993           0 :                 info->name = "extensionBap226";
   17994           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17995           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17996           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap226;
   17997           0 :                 return GF_OK;
   17998             :         case 226:
   17999           0 :                 info->name = "extensionBap227";
   18000           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18001           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18002           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap227;
   18003           0 :                 return GF_OK;
   18004             :         case 227:
   18005           0 :                 info->name = "extensionBap228";
   18006           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18007           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18008           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap228;
   18009           0 :                 return GF_OK;
   18010             :         case 228:
   18011           0 :                 info->name = "extensionBap229";
   18012           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18013           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18014           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap229;
   18015           0 :                 return GF_OK;
   18016             :         case 229:
   18017           0 :                 info->name = "extensionBap230";
   18018           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18019           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18020           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap230;
   18021           0 :                 return GF_OK;
   18022             :         case 230:
   18023           0 :                 info->name = "extensionBap231";
   18024           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18025           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18026           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap231;
   18027           0 :                 return GF_OK;
   18028             :         case 231:
   18029           0 :                 info->name = "extensionBap232";
   18030           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18031           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18032           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap232;
   18033           0 :                 return GF_OK;
   18034             :         case 232:
   18035           0 :                 info->name = "extensionBap233";
   18036           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18037           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18038           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap233;
   18039           0 :                 return GF_OK;
   18040             :         case 233:
   18041           0 :                 info->name = "extensionBap234";
   18042           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18043           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18044           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap234;
   18045           0 :                 return GF_OK;
   18046             :         case 234:
   18047           0 :                 info->name = "extensionBap235";
   18048           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18049           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18050           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap235;
   18051           0 :                 return GF_OK;
   18052             :         case 235:
   18053           0 :                 info->name = "extensionBap236";
   18054           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18055           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18056           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap236;
   18057           0 :                 return GF_OK;
   18058             :         case 236:
   18059           0 :                 info->name = "extensionBap237";
   18060           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18061           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18062           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap237;
   18063           0 :                 return GF_OK;
   18064             :         case 237:
   18065           0 :                 info->name = "extensionBap238";
   18066           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18067           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18068           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap238;
   18069           0 :                 return GF_OK;
   18070             :         case 238:
   18071           0 :                 info->name = "extensionBap239";
   18072           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18073           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18074           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap239;
   18075           0 :                 return GF_OK;
   18076             :         case 239:
   18077           0 :                 info->name = "extensionBap240";
   18078           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18079           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18080           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap240;
   18081           0 :                 return GF_OK;
   18082             :         case 240:
   18083           0 :                 info->name = "extensionBap241";
   18084           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18085           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18086           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap241;
   18087           0 :                 return GF_OK;
   18088             :         case 241:
   18089           0 :                 info->name = "extensionBap242";
   18090           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18091           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18092           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap242;
   18093           0 :                 return GF_OK;
   18094             :         case 242:
   18095           0 :                 info->name = "extensionBap243";
   18096           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18097           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18098           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap243;
   18099           0 :                 return GF_OK;
   18100             :         case 243:
   18101           0 :                 info->name = "extensionBap244";
   18102           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18103           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18104           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap244;
   18105           0 :                 return GF_OK;
   18106             :         case 244:
   18107           0 :                 info->name = "extensionBap245";
   18108           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18109           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18110           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap245;
   18111           0 :                 return GF_OK;
   18112             :         case 245:
   18113           0 :                 info->name = "extensionBap246";
   18114           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18115           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18116           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap246;
   18117           0 :                 return GF_OK;
   18118             :         case 246:
   18119           0 :                 info->name = "extensionBap247";
   18120           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18121           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18122           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap247;
   18123           0 :                 return GF_OK;
   18124             :         case 247:
   18125           0 :                 info->name = "extensionBap248";
   18126           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18127           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18128           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap248;
   18129           0 :                 return GF_OK;
   18130             :         case 248:
   18131           0 :                 info->name = "extensionBap249";
   18132           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18133           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18134           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap249;
   18135           0 :                 return GF_OK;
   18136             :         case 249:
   18137           0 :                 info->name = "extensionBap250";
   18138           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18139           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18140           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap250;
   18141           0 :                 return GF_OK;
   18142             :         case 250:
   18143           0 :                 info->name = "extensionBap251";
   18144           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18145           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18146           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap251;
   18147           0 :                 return GF_OK;
   18148             :         case 251:
   18149           0 :                 info->name = "extensionBap252";
   18150           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18151           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18152           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap252;
   18153           0 :                 return GF_OK;
   18154             :         case 252:
   18155           0 :                 info->name = "extensionBap253";
   18156           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18157           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18158           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap253;
   18159           0 :                 return GF_OK;
   18160             :         case 253:
   18161           0 :                 info->name = "extensionBap254";
   18162           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18163           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18164           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap254;
   18165           0 :                 return GF_OK;
   18166             :         case 254:
   18167           0 :                 info->name = "extensionBap255";
   18168           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18169           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18170           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap255;
   18171           0 :                 return GF_OK;
   18172             :         case 255:
   18173           0 :                 info->name = "extensionBap256";
   18174           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18175           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18176           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap256;
   18177           0 :                 return GF_OK;
   18178             :         case 256:
   18179           0 :                 info->name = "extensionBap257";
   18180           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18181           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18182           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap257;
   18183           0 :                 return GF_OK;
   18184             :         case 257:
   18185           0 :                 info->name = "extensionBap258";
   18186           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18187           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18188           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap258;
   18189           0 :                 return GF_OK;
   18190             :         case 258:
   18191           0 :                 info->name = "extensionBap259";
   18192           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18193           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18194           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap259;
   18195           0 :                 return GF_OK;
   18196             :         case 259:
   18197           0 :                 info->name = "extensionBap260";
   18198           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18199           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18200           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap260;
   18201           0 :                 return GF_OK;
   18202             :         case 260:
   18203           0 :                 info->name = "extensionBap261";
   18204           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18205           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18206           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap261;
   18207           0 :                 return GF_OK;
   18208             :         case 261:
   18209           0 :                 info->name = "extensionBap262";
   18210           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18211           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18212           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap262;
   18213           0 :                 return GF_OK;
   18214             :         case 262:
   18215           0 :                 info->name = "extensionBap263";
   18216           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18217           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18218           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap263;
   18219           0 :                 return GF_OK;
   18220             :         case 263:
   18221           0 :                 info->name = "extensionBap264";
   18222           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18223           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18224           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap264;
   18225           0 :                 return GF_OK;
   18226             :         case 264:
   18227           0 :                 info->name = "extensionBap265";
   18228           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18229           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18230           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap265;
   18231           0 :                 return GF_OK;
   18232             :         case 265:
   18233           0 :                 info->name = "extensionBap266";
   18234           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18235           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18236           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap266;
   18237           0 :                 return GF_OK;
   18238             :         case 266:
   18239           0 :                 info->name = "extensionBap267";
   18240           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18241           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18242           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap267;
   18243           0 :                 return GF_OK;
   18244             :         case 267:
   18245           0 :                 info->name = "extensionBap268";
   18246           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18247           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18248           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap268;
   18249           0 :                 return GF_OK;
   18250             :         case 268:
   18251           0 :                 info->name = "extensionBap269";
   18252           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18253           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18254           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap269;
   18255           0 :                 return GF_OK;
   18256             :         case 269:
   18257           0 :                 info->name = "extensionBap270";
   18258           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18259           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18260           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap270;
   18261           0 :                 return GF_OK;
   18262             :         case 270:
   18263           0 :                 info->name = "extensionBap271";
   18264           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18265           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18266           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap271;
   18267           0 :                 return GF_OK;
   18268             :         case 271:
   18269           0 :                 info->name = "extensionBap272";
   18270           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18271           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18272           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap272;
   18273           0 :                 return GF_OK;
   18274             :         case 272:
   18275           0 :                 info->name = "extensionBap273";
   18276           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18277           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18278           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap273;
   18279           0 :                 return GF_OK;
   18280             :         case 273:
   18281           0 :                 info->name = "extensionBap274";
   18282           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18283           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18284           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap274;
   18285           0 :                 return GF_OK;
   18286             :         case 274:
   18287           0 :                 info->name = "extensionBap275";
   18288           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18289           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18290           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap275;
   18291           0 :                 return GF_OK;
   18292             :         case 275:
   18293           0 :                 info->name = "extensionBap276";
   18294           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18295           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18296           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap276;
   18297           0 :                 return GF_OK;
   18298             :         case 276:
   18299           0 :                 info->name = "extensionBap277";
   18300           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18301           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18302           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap277;
   18303           0 :                 return GF_OK;
   18304             :         case 277:
   18305           0 :                 info->name = "extensionBap278";
   18306           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18307           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18308           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap278;
   18309           0 :                 return GF_OK;
   18310             :         case 278:
   18311           0 :                 info->name = "extensionBap279";
   18312           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18313           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18314           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap279;
   18315           0 :                 return GF_OK;
   18316             :         case 279:
   18317           0 :                 info->name = "extensionBap280";
   18318           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18319           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18320           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap280;
   18321           0 :                 return GF_OK;
   18322             :         case 280:
   18323           0 :                 info->name = "extensionBap281";
   18324           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18325           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18326           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap281;
   18327           0 :                 return GF_OK;
   18328             :         case 281:
   18329           0 :                 info->name = "extensionBap282";
   18330           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18331           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18332           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap282;
   18333           0 :                 return GF_OK;
   18334             :         case 282:
   18335           0 :                 info->name = "extensionBap283";
   18336           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18337           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18338           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap283;
   18339           0 :                 return GF_OK;
   18340             :         case 283:
   18341           0 :                 info->name = "extensionBap284";
   18342           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18343           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18344           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap284;
   18345           0 :                 return GF_OK;
   18346             :         case 284:
   18347           0 :                 info->name = "extensionBap285";
   18348           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18349           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18350           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap285;
   18351           0 :                 return GF_OK;
   18352             :         case 285:
   18353           0 :                 info->name = "extensionBap286";
   18354           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18355           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18356           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap286;
   18357           0 :                 return GF_OK;
   18358             :         case 286:
   18359           0 :                 info->name = "extensionBap287";
   18360           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18361           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18362           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap287;
   18363           0 :                 return GF_OK;
   18364             :         case 287:
   18365           0 :                 info->name = "extensionBap288";
   18366           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18367           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18368           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap288;
   18369           0 :                 return GF_OK;
   18370             :         case 288:
   18371           0 :                 info->name = "extensionBap289";
   18372           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18373           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18374           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap289;
   18375           0 :                 return GF_OK;
   18376             :         case 289:
   18377           0 :                 info->name = "extensionBap290";
   18378           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18379           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18380           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap290;
   18381           0 :                 return GF_OK;
   18382             :         case 290:
   18383           0 :                 info->name = "extensionBap291";
   18384           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18385           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18386           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap291;
   18387           0 :                 return GF_OK;
   18388             :         case 291:
   18389           0 :                 info->name = "extensionBap292";
   18390           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18391           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18392           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap292;
   18393           0 :                 return GF_OK;
   18394             :         case 292:
   18395           0 :                 info->name = "extensionBap293";
   18396           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18397           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18398           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap293;
   18399           0 :                 return GF_OK;
   18400             :         case 293:
   18401           0 :                 info->name = "extensionBap294";
   18402           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18403           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18404           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap294;
   18405           0 :                 return GF_OK;
   18406             :         case 294:
   18407           0 :                 info->name = "extensionBap295";
   18408           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18409           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18410           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap295;
   18411           0 :                 return GF_OK;
   18412             :         case 295:
   18413           0 :                 info->name = "extensionBap296";
   18414           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18415           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18416           0 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap296;
   18417           0 :                 return GF_OK;
   18418             :         default:
   18419           0 :                 return GF_BAD_PARAM;
   18420             :         }
   18421           0 : }
   18422             : 
   18423             : 
   18424             : static s32 BAP_get_field_index_by_name(char *name)
   18425             : {
   18426           0 :         if (!strcmp("sacroiliac_tilt", name)) return 0;
   18427           0 :         if (!strcmp("sacroiliac_torsion", name)) return 1;
   18428           0 :         if (!strcmp("sacroiliac_roll", name)) return 2;
   18429           0 :         if (!strcmp("l_hip_flexion", name)) return 3;
   18430           0 :         if (!strcmp("r_hip_flexion", name)) return 4;
   18431           0 :         if (!strcmp("l_hip_abduct", name)) return 5;
   18432           0 :         if (!strcmp("r_hip_abduct", name)) return 6;
   18433           0 :         if (!strcmp("l_hip_twisting", name)) return 7;
   18434           0 :         if (!strcmp("r_hip_twisting", name)) return 8;
   18435           0 :         if (!strcmp("l_knee_flexion", name)) return 9;
   18436           0 :         if (!strcmp("r_knee_flexion", name)) return 10;
   18437           0 :         if (!strcmp("l_knee_twisting", name)) return 11;
   18438           0 :         if (!strcmp("r_knee_twisting", name)) return 12;
   18439           0 :         if (!strcmp("l_ankle_flexion", name)) return 13;
   18440           0 :         if (!strcmp("r_ankle_flexion", name)) return 14;
   18441           0 :         if (!strcmp("l_ankle_twisting", name)) return 15;
   18442           0 :         if (!strcmp("r_ankle_twisting", name)) return 16;
   18443           0 :         if (!strcmp("l_subtalar_flexion", name)) return 17;
   18444           0 :         if (!strcmp("r_subtalar_flexion", name)) return 18;
   18445           0 :         if (!strcmp("l_midtarsal_flexion", name)) return 19;
   18446           0 :         if (!strcmp("r_midtarsal_flexion", name)) return 20;
   18447           0 :         if (!strcmp("l_metatarsal_flexion", name)) return 21;
   18448           0 :         if (!strcmp("r_metatarsal_flexion", name)) return 22;
   18449           0 :         if (!strcmp("l_sternoclavicular_abduct", name)) return 23;
   18450           0 :         if (!strcmp("r_sternoclavicular_abduct", name)) return 24;
   18451           0 :         if (!strcmp("l_sternoclavicular_rotate", name)) return 25;
   18452           0 :         if (!strcmp("r_sternoclavicular_rotate", name)) return 26;
   18453           0 :         if (!strcmp("l_acromioclavicular_abduct", name)) return 27;
   18454           0 :         if (!strcmp("r_acromioclavicular_abduct", name)) return 28;
   18455           0 :         if (!strcmp("l_acromioclavicular_rotate", name)) return 29;
   18456           0 :         if (!strcmp("r_acromioclavicular_rotate", name)) return 30;
   18457           0 :         if (!strcmp("l_shoulder_flexion", name)) return 31;
   18458           0 :         if (!strcmp("r_shoulder_flexion", name)) return 32;
   18459           0 :         if (!strcmp("l_shoulder_abduct", name)) return 33;
   18460           0 :         if (!strcmp("r_shoulder_abduct", name)) return 34;
   18461           0 :         if (!strcmp("l_shoulder_twisting", name)) return 35;
   18462           0 :         if (!strcmp("r_shoulder_twisting", name)) return 36;
   18463           0 :         if (!strcmp("l_elbow_flexion", name)) return 37;
   18464           0 :         if (!strcmp("r_elbow_flexion", name)) return 38;
   18465           0 :         if (!strcmp("l_elbow_twisting", name)) return 39;
   18466           0 :         if (!strcmp("r_elbow_twisting", name)) return 40;
   18467           0 :         if (!strcmp("l_wrist_flexion", name)) return 41;
   18468           0 :         if (!strcmp("r_wrist_flexion", name)) return 42;
   18469           0 :         if (!strcmp("l_wrist_pivot", name)) return 43;
   18470           0 :         if (!strcmp("r_wrist_pivot", name)) return 44;
   18471           0 :         if (!strcmp("l_wrist_twisting", name)) return 45;
   18472           0 :         if (!strcmp("r_wrist_twisting", name)) return 46;
   18473           0 :         if (!strcmp("skullbase_roll", name)) return 47;
   18474           0 :         if (!strcmp("skullbase_torsion", name)) return 48;
   18475           0 :         if (!strcmp("skullbase_tilt", name)) return 49;
   18476           0 :         if (!strcmp("vc1roll", name)) return 50;
   18477           0 :         if (!strcmp("vc1torsion", name)) return 51;
   18478           0 :         if (!strcmp("vc1tilt", name)) return 52;
   18479           0 :         if (!strcmp("vc2roll", name)) return 53;
   18480           0 :         if (!strcmp("vc2torsion", name)) return 54;
   18481           0 :         if (!strcmp("vc2tilt", name)) return 55;
   18482           0 :         if (!strcmp("vc3roll", name)) return 56;
   18483           0 :         if (!strcmp("vc3torsion", name)) return 57;
   18484           0 :         if (!strcmp("vc3tilt", name)) return 58;
   18485           0 :         if (!strcmp("vc4roll", name)) return 59;
   18486           0 :         if (!strcmp("vc4torsion", name)) return 60;
   18487           0 :         if (!strcmp("vc4tilt", name)) return 61;
   18488           0 :         if (!strcmp("vc5roll", name)) return 62;
   18489           0 :         if (!strcmp("vc5torsion", name)) return 63;
   18490           0 :         if (!strcmp("vc5tilt", name)) return 64;
   18491           0 :         if (!strcmp("vc6roll", name)) return 65;
   18492           0 :         if (!strcmp("vc6torsion", name)) return 66;
   18493           0 :         if (!strcmp("vc6tilt", name)) return 67;
   18494           0 :         if (!strcmp("vc7roll", name)) return 68;
   18495           0 :         if (!strcmp("vc7torsion", name)) return 69;
   18496           0 :         if (!strcmp("vc7tilt", name)) return 70;
   18497           0 :         if (!strcmp("vt1roll", name)) return 71;
   18498           0 :         if (!strcmp("vt1torsion", name)) return 72;
   18499           0 :         if (!strcmp("vt1tilt", name)) return 73;
   18500           0 :         if (!strcmp("vt2roll", name)) return 74;
   18501           0 :         if (!strcmp("vt2torsion", name)) return 75;
   18502           0 :         if (!strcmp("vt2tilt", name)) return 76;
   18503           0 :         if (!strcmp("vt3roll", name)) return 77;
   18504           0 :         if (!strcmp("vt3torsion", name)) return 78;
   18505           0 :         if (!strcmp("vt3tilt", name)) return 79;
   18506           0 :         if (!strcmp("vt4roll", name)) return 80;
   18507           0 :         if (!strcmp("vt4torsion", name)) return 81;
   18508           0 :         if (!strcmp("vt4tilt", name)) return 82;
   18509           0 :         if (!strcmp("vt5roll", name)) return 83;
   18510           0 :         if (!strcmp("vt5torsion", name)) return 84;
   18511           0 :         if (!strcmp("vt5tilt", name)) return 85;
   18512           0 :         if (!strcmp("vt6roll", name)) return 86;
   18513           0 :         if (!strcmp("vt6torsion", name)) return 87;
   18514           0 :         if (!strcmp("vt6tilt", name)) return 88;
   18515           0 :         if (!strcmp("vt7roll", name)) return 89;
   18516           0 :         if (!strcmp("vt7torsion", name)) return 90;
   18517           0 :         if (!strcmp("vt7tilt", name)) return 91;
   18518           0 :         if (!strcmp("vt8roll", name)) return 92;
   18519           0 :         if (!strcmp("vt8torsion", name)) return 93;
   18520           0 :         if (!strcmp("vt8tilt", name)) return 94;
   18521           0 :         if (!strcmp("vt9roll", name)) return 95;
   18522           0 :         if (!strcmp("vt9torsion", name)) return 96;
   18523           0 :         if (!strcmp("vt9tilt", name)) return 97;
   18524           0 :         if (!strcmp("vt10roll", name)) return 98;
   18525           0 :         if (!strcmp("vt10torsion", name)) return 99;
   18526           0 :         if (!strcmp("vt10tilt", name)) return 100;
   18527           0 :         if (!strcmp("vt11roll", name)) return 101;
   18528           0 :         if (!strcmp("vt11torsion", name)) return 102;
   18529           0 :         if (!strcmp("vt11tilt", name)) return 103;
   18530           0 :         if (!strcmp("vt12roll", name)) return 104;
   18531           0 :         if (!strcmp("vt12torsion", name)) return 105;
   18532           0 :         if (!strcmp("vt12tilt", name)) return 106;
   18533           0 :         if (!strcmp("vl1roll", name)) return 107;
   18534           0 :         if (!strcmp("vl1torsion", name)) return 108;
   18535           0 :         if (!strcmp("vl1tilt", name)) return 109;
   18536           0 :         if (!strcmp("vl2roll", name)) return 110;
   18537           0 :         if (!strcmp("vl2torsion", name)) return 111;
   18538           0 :         if (!strcmp("vl2tilt", name)) return 112;
   18539           0 :         if (!strcmp("vl3roll", name)) return 113;
   18540           0 :         if (!strcmp("vl3torsion", name)) return 114;
   18541           0 :         if (!strcmp("vl3tilt", name)) return 115;
   18542           0 :         if (!strcmp("vl4roll", name)) return 116;
   18543           0 :         if (!strcmp("vl4torsion", name)) return 117;
   18544           0 :         if (!strcmp("vl4tilt", name)) return 118;
   18545           0 :         if (!strcmp("vl5roll", name)) return 119;
   18546           0 :         if (!strcmp("vl5torsion", name)) return 120;
   18547           0 :         if (!strcmp("vl5tilt", name)) return 121;
   18548           0 :         if (!strcmp("l_pinky0_flexion", name)) return 122;
   18549           0 :         if (!strcmp("r_pinky0_flexion", name)) return 123;
   18550           0 :         if (!strcmp("l_pinky1_flexion", name)) return 124;
   18551           0 :         if (!strcmp("r_pinky1_flexion", name)) return 125;
   18552           0 :         if (!strcmp("l_pinky1_pivot", name)) return 126;
   18553           0 :         if (!strcmp("r_pinky1_pivot", name)) return 127;
   18554           0 :         if (!strcmp("l_pinky1_twisting", name)) return 128;
   18555           0 :         if (!strcmp("r_pinky1_twisting", name)) return 129;
   18556           0 :         if (!strcmp("l_pinky2_flexion", name)) return 130;
   18557           0 :         if (!strcmp("r_pinky2_flexion", name)) return 131;
   18558           0 :         if (!strcmp("l_pinky3_flexion", name)) return 132;
   18559           0 :         if (!strcmp("r_pinky3_flexion", name)) return 133;
   18560           0 :         if (!strcmp("l_ring0_flexion", name)) return 134;
   18561           0 :         if (!strcmp("r_ring0_flexion", name)) return 135;
   18562           0 :         if (!strcmp("l_ring1_flexion", name)) return 136;
   18563           0 :         if (!strcmp("r_ring1_flexion", name)) return 137;
   18564           0 :         if (!strcmp("l_ring1_pivot", name)) return 138;
   18565           0 :         if (!strcmp("r_ring1_pivot", name)) return 139;
   18566           0 :         if (!strcmp("l_ring1_twisting", name)) return 140;
   18567           0 :         if (!strcmp("r_ring1_twisting", name)) return 141;
   18568           0 :         if (!strcmp("l_ring2_flexion", name)) return 142;
   18569           0 :         if (!strcmp("r_ring2_flexion", name)) return 143;
   18570           0 :         if (!strcmp("l_ring3_flexion", name)) return 144;
   18571           0 :         if (!strcmp("r_ring3_flexion", name)) return 145;
   18572           0 :         if (!strcmp("l_middle0_flexion", name)) return 146;
   18573           0 :         if (!strcmp("r_middle0_flexion", name)) return 147;
   18574           0 :         if (!strcmp("l_middle1_flexion", name)) return 148;
   18575           0 :         if (!strcmp("r_middle1_flexion", name)) return 149;
   18576           0 :         if (!strcmp("l_middle1_pivot", name)) return 150;
   18577           0 :         if (!strcmp("r_middle1_pivot", name)) return 151;
   18578           0 :         if (!strcmp("l_middle1_twisting", name)) return 152;
   18579           0 :         if (!strcmp("r_middle1_twisting", name)) return 153;
   18580           0 :         if (!strcmp("l_middle2_flexion", name)) return 154;
   18581           0 :         if (!strcmp("r_middle2_flexion", name)) return 155;
   18582           0 :         if (!strcmp("l_middle3_flexion", name)) return 156;
   18583           0 :         if (!strcmp("r_middle3_flexion", name)) return 157;
   18584           0 :         if (!strcmp("l_index0_flexion", name)) return 158;
   18585           0 :         if (!strcmp("r_index0_flexion", name)) return 159;
   18586           0 :         if (!strcmp("l_index1_flexion", name)) return 160;
   18587           0 :         if (!strcmp("r_index1_flexion", name)) return 161;
   18588           0 :         if (!strcmp("l_index1_pivot", name)) return 162;
   18589           0 :         if (!strcmp("r_index1_pivot", name)) return 163;
   18590           0 :         if (!strcmp("l_index1_twisting", name)) return 164;
   18591           0 :         if (!strcmp("r_index1_twisting", name)) return 165;
   18592           0 :         if (!strcmp("l_index2_flexion", name)) return 166;
   18593           0 :         if (!strcmp("r_index2_flexion", name)) return 167;
   18594           0 :         if (!strcmp("l_index3_flexion", name)) return 168;
   18595           0 :         if (!strcmp("r_index3_flexion", name)) return 169;
   18596           0 :         if (!strcmp("l_thumb1_flexion", name)) return 170;
   18597           0 :         if (!strcmp("r_thumb1_flexion", name)) return 171;
   18598           0 :         if (!strcmp("l_thumb1_pivot", name)) return 172;
   18599           0 :         if (!strcmp("r_thumb1_pivot", name)) return 173;
   18600           0 :         if (!strcmp("l_thumb1_twisting", name)) return 174;
   18601           0 :         if (!strcmp("r_thumb1_twisting", name)) return 175;
   18602           0 :         if (!strcmp("l_thumb2_flexion", name)) return 176;
   18603           0 :         if (!strcmp("r_thumb2_flexion", name)) return 177;
   18604           0 :         if (!strcmp("l_thumb3_flexion", name)) return 178;
   18605           0 :         if (!strcmp("r_thumb3_flexion", name)) return 179;
   18606           0 :         if (!strcmp("HumanoidRoot_tr_vertical", name)) return 180;
   18607           0 :         if (!strcmp("HumanoidRoot_tr_lateral", name)) return 181;
   18608           0 :         if (!strcmp("HumanoidRoot_tr_frontal", name)) return 182;
   18609           0 :         if (!strcmp("HumanoidRoot_rt_body_turn", name)) return 183;
   18610           0 :         if (!strcmp("HumanoidRoot_rt_body_roll", name)) return 184;
   18611           0 :         if (!strcmp("HumanoidRoot_rt_body_tilt", name)) return 185;
   18612           0 :         if (!strcmp("extensionBap187", name)) return 186;
   18613           0 :         if (!strcmp("extensionBap188", name)) return 187;
   18614           0 :         if (!strcmp("extensionBap189", name)) return 188;
   18615           0 :         if (!strcmp("extensionBap190", name)) return 189;
   18616           0 :         if (!strcmp("extensionBap191", name)) return 190;
   18617           0 :         if (!strcmp("extensionBap192", name)) return 191;
   18618           0 :         if (!strcmp("extensionBap193", name)) return 192;
   18619           0 :         if (!strcmp("extensionBap194", name)) return 193;
   18620           0 :         if (!strcmp("extensionBap195", name)) return 194;
   18621           0 :         if (!strcmp("extensionBap196", name)) return 195;
   18622           0 :         if (!strcmp("extensionBap197", name)) return 196;
   18623           0 :         if (!strcmp("extensionBap198", name)) return 197;
   18624           0 :         if (!strcmp("extensionBap199", name)) return 198;
   18625           0 :         if (!strcmp("extensionBap200", name)) return 199;
   18626           0 :         if (!strcmp("extensionBap201", name)) return 200;
   18627           0 :         if (!strcmp("extensionBap202", name)) return 201;
   18628           0 :         if (!strcmp("extensionBap203", name)) return 202;
   18629           0 :         if (!strcmp("extensionBap204", name)) return 203;
   18630           0 :         if (!strcmp("extensionBap205", name)) return 204;
   18631           0 :         if (!strcmp("extensionBap206", name)) return 205;
   18632           0 :         if (!strcmp("extensionBap207", name)) return 206;
   18633           0 :         if (!strcmp("extensionBap208", name)) return 207;
   18634           0 :         if (!strcmp("extensionBap209", name)) return 208;
   18635           0 :         if (!strcmp("extensionBap210", name)) return 209;
   18636           0 :         if (!strcmp("extensionBap211", name)) return 210;
   18637           0 :         if (!strcmp("extensionBap212", name)) return 211;
   18638           0 :         if (!strcmp("extensionBap213", name)) return 212;
   18639           0 :         if (!strcmp("extensionBap214", name)) return 213;
   18640           0 :         if (!strcmp("extensionBap215", name)) return 214;
   18641           0 :         if (!strcmp("extensionBap216", name)) return 215;
   18642           0 :         if (!strcmp("extensionBap217", name)) return 216;
   18643           0 :         if (!strcmp("extensionBap218", name)) return 217;
   18644           0 :         if (!strcmp("extensionBap219", name)) return 218;
   18645           0 :         if (!strcmp("extensionBap220", name)) return 219;
   18646           0 :         if (!strcmp("extensionBap221", name)) return 220;
   18647           0 :         if (!strcmp("extensionBap222", name)) return 221;
   18648           0 :         if (!strcmp("extensionBap223", name)) return 222;
   18649           0 :         if (!strcmp("extensionBap224", name)) return 223;
   18650           0 :         if (!strcmp("extensionBap225", name)) return 224;
   18651           0 :         if (!strcmp("extensionBap226", name)) return 225;
   18652           0 :         if (!strcmp("extensionBap227", name)) return 226;
   18653           0 :         if (!strcmp("extensionBap228", name)) return 227;
   18654           0 :         if (!strcmp("extensionBap229", name)) return 228;
   18655           0 :         if (!strcmp("extensionBap230", name)) return 229;
   18656           0 :         if (!strcmp("extensionBap231", name)) return 230;
   18657           0 :         if (!strcmp("extensionBap232", name)) return 231;
   18658           0 :         if (!strcmp("extensionBap233", name)) return 232;
   18659           0 :         if (!strcmp("extensionBap234", name)) return 233;
   18660           0 :         if (!strcmp("extensionBap235", name)) return 234;
   18661           0 :         if (!strcmp("extensionBap236", name)) return 235;
   18662           0 :         if (!strcmp("extensionBap237", name)) return 236;
   18663           0 :         if (!strcmp("extensionBap238", name)) return 237;
   18664           0 :         if (!strcmp("extensionBap239", name)) return 238;
   18665           0 :         if (!strcmp("extensionBap240", name)) return 239;
   18666           0 :         if (!strcmp("extensionBap241", name)) return 240;
   18667           0 :         if (!strcmp("extensionBap242", name)) return 241;
   18668           0 :         if (!strcmp("extensionBap243", name)) return 242;
   18669           0 :         if (!strcmp("extensionBap244", name)) return 243;
   18670           0 :         if (!strcmp("extensionBap245", name)) return 244;
   18671           0 :         if (!strcmp("extensionBap246", name)) return 245;
   18672           0 :         if (!strcmp("extensionBap247", name)) return 246;
   18673           0 :         if (!strcmp("extensionBap248", name)) return 247;
   18674           0 :         if (!strcmp("extensionBap249", name)) return 248;
   18675           0 :         if (!strcmp("extensionBap250", name)) return 249;
   18676           0 :         if (!strcmp("extensionBap251", name)) return 250;
   18677           0 :         if (!strcmp("extensionBap252", name)) return 251;
   18678           0 :         if (!strcmp("extensionBap253", name)) return 252;
   18679           0 :         if (!strcmp("extensionBap254", name)) return 253;
   18680           0 :         if (!strcmp("extensionBap255", name)) return 254;
   18681           0 :         if (!strcmp("extensionBap256", name)) return 255;
   18682           0 :         if (!strcmp("extensionBap257", name)) return 256;
   18683           0 :         if (!strcmp("extensionBap258", name)) return 257;
   18684           0 :         if (!strcmp("extensionBap259", name)) return 258;
   18685           0 :         if (!strcmp("extensionBap260", name)) return 259;
   18686           0 :         if (!strcmp("extensionBap261", name)) return 260;
   18687           0 :         if (!strcmp("extensionBap262", name)) return 261;
   18688           0 :         if (!strcmp("extensionBap263", name)) return 262;
   18689           0 :         if (!strcmp("extensionBap264", name)) return 263;
   18690           0 :         if (!strcmp("extensionBap265", name)) return 264;
   18691           0 :         if (!strcmp("extensionBap266", name)) return 265;
   18692           0 :         if (!strcmp("extensionBap267", name)) return 266;
   18693           0 :         if (!strcmp("extensionBap268", name)) return 267;
   18694           0 :         if (!strcmp("extensionBap269", name)) return 268;
   18695           0 :         if (!strcmp("extensionBap270", name)) return 269;
   18696           0 :         if (!strcmp("extensionBap271", name)) return 270;
   18697           0 :         if (!strcmp("extensionBap272", name)) return 271;
   18698           0 :         if (!strcmp("extensionBap273", name)) return 272;
   18699           0 :         if (!strcmp("extensionBap274", name)) return 273;
   18700           0 :         if (!strcmp("extensionBap275", name)) return 274;
   18701           0 :         if (!strcmp("extensionBap276", name)) return 275;
   18702           0 :         if (!strcmp("extensionBap277", name)) return 276;
   18703           0 :         if (!strcmp("extensionBap278", name)) return 277;
   18704           0 :         if (!strcmp("extensionBap279", name)) return 278;
   18705           0 :         if (!strcmp("extensionBap280", name)) return 279;
   18706           0 :         if (!strcmp("extensionBap281", name)) return 280;
   18707           0 :         if (!strcmp("extensionBap282", name)) return 281;
   18708           0 :         if (!strcmp("extensionBap283", name)) return 282;
   18709           0 :         if (!strcmp("extensionBap284", name)) return 283;
   18710           0 :         if (!strcmp("extensionBap285", name)) return 284;
   18711           0 :         if (!strcmp("extensionBap286", name)) return 285;
   18712           0 :         if (!strcmp("extensionBap287", name)) return 286;
   18713           0 :         if (!strcmp("extensionBap288", name)) return 287;
   18714           0 :         if (!strcmp("extensionBap289", name)) return 288;
   18715           0 :         if (!strcmp("extensionBap290", name)) return 289;
   18716           0 :         if (!strcmp("extensionBap291", name)) return 290;
   18717           0 :         if (!strcmp("extensionBap292", name)) return 291;
   18718           0 :         if (!strcmp("extensionBap293", name)) return 292;
   18719           0 :         if (!strcmp("extensionBap294", name)) return 293;
   18720           0 :         if (!strcmp("extensionBap295", name)) return 294;
   18721           0 :         if (!strcmp("extensionBap296", name)) return 295;
   18722           0 :         return -1;
   18723           0 : }
   18724             : static Bool BAP_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   18725             : {
   18726           0 :         switch (FieldIndex) {
   18727             :         case 0:
   18728           0 :                 *AType = 0;
   18729           0 :                 *QType = 0;
   18730           0 :                 *b_min = FIX_MIN;
   18731           0 :                 *b_max = FIX_MAX;
   18732           0 :                 return 1;
   18733             :         case 1:
   18734           0 :                 *AType = 0;
   18735           0 :                 *QType = 0;
   18736           0 :                 *b_min = FIX_MIN;
   18737           0 :                 *b_max = FIX_MAX;
   18738           0 :                 return 1;
   18739             :         case 2:
   18740           0 :                 *AType = 0;
   18741           0 :                 *QType = 0;
   18742           0 :                 *b_min = FIX_MIN;
   18743           0 :                 *b_max = FIX_MAX;
   18744           0 :                 return 1;
   18745             :         case 3:
   18746           0 :                 *AType = 0;
   18747           0 :                 *QType = 0;
   18748           0 :                 *b_min = FIX_MIN;
   18749           0 :                 *b_max = FIX_MAX;
   18750           0 :                 return 1;
   18751             :         case 4:
   18752           0 :                 *AType = 0;
   18753           0 :                 *QType = 0;
   18754           0 :                 *b_min = FIX_MIN;
   18755           0 :                 *b_max = FIX_MAX;
   18756           0 :                 return 1;
   18757             :         case 5:
   18758           0 :                 *AType = 0;
   18759           0 :                 *QType = 0;
   18760           0 :                 *b_min = FIX_MIN;
   18761           0 :                 *b_max = FIX_MAX;
   18762           0 :                 return 1;
   18763             :         case 6:
   18764           0 :                 *AType = 0;
   18765           0 :                 *QType = 0;
   18766           0 :                 *b_min = FIX_MIN;
   18767           0 :                 *b_max = FIX_MAX;
   18768           0 :                 return 1;
   18769             :         case 7:
   18770           0 :                 *AType = 0;
   18771           0 :                 *QType = 0;
   18772           0 :                 *b_min = FIX_MIN;
   18773           0 :                 *b_max = FIX_MAX;
   18774           0 :                 return 1;
   18775             :         case 8:
   18776           0 :                 *AType = 0;
   18777           0 :                 *QType = 0;
   18778           0 :                 *b_min = FIX_MIN;
   18779           0 :                 *b_max = FIX_MAX;
   18780           0 :                 return 1;
   18781             :         case 9:
   18782           0 :                 *AType = 0;
   18783           0 :                 *QType = 0;
   18784           0 :                 *b_min = FIX_MIN;
   18785           0 :                 *b_max = FIX_MAX;
   18786           0 :                 return 1;
   18787             :         case 10:
   18788           0 :                 *AType = 0;
   18789           0 :                 *QType = 0;
   18790           0 :                 *b_min = FIX_MIN;
   18791           0 :                 *b_max = FIX_MAX;
   18792           0 :                 return 1;
   18793             :         case 11:
   18794           0 :                 *AType = 0;
   18795           0 :                 *QType = 0;
   18796           0 :                 *b_min = FIX_MIN;
   18797           0 :                 *b_max = FIX_MAX;
   18798           0 :                 return 1;
   18799             :         case 12:
   18800           0 :                 *AType = 0;
   18801           0 :                 *QType = 0;
   18802           0 :                 *b_min = FIX_MIN;
   18803           0 :                 *b_max = FIX_MAX;
   18804           0 :                 return 1;
   18805             :         case 13:
   18806           0 :                 *AType = 0;
   18807           0 :                 *QType = 0;
   18808           0 :                 *b_min = FIX_MIN;
   18809           0 :                 *b_max = FIX_MAX;
   18810           0 :                 return 1;
   18811             :         case 14:
   18812           0 :                 *AType = 0;
   18813           0 :                 *QType = 0;
   18814           0 :                 *b_min = FIX_MIN;
   18815           0 :                 *b_max = FIX_MAX;
   18816           0 :                 return 1;
   18817             :         case 15:
   18818           0 :                 *AType = 0;
   18819           0 :                 *QType = 0;
   18820           0 :                 *b_min = FIX_MIN;
   18821           0 :                 *b_max = FIX_MAX;
   18822           0 :                 return 1;
   18823             :         case 16:
   18824           0 :                 *AType = 0;
   18825           0 :                 *QType = 0;
   18826           0 :                 *b_min = FIX_MIN;
   18827           0 :                 *b_max = FIX_MAX;
   18828           0 :                 return 1;
   18829             :         case 17:
   18830           0 :                 *AType = 0;
   18831           0 :                 *QType = 0;
   18832           0 :                 *b_min = FIX_MIN;
   18833           0 :                 *b_max = FIX_MAX;
   18834           0 :                 return 1;
   18835             :         case 18:
   18836           0 :                 *AType = 0;
   18837           0 :                 *QType = 0;
   18838           0 :                 *b_min = FIX_MIN;
   18839           0 :                 *b_max = FIX_MAX;
   18840           0 :                 return 1;
   18841             :         case 19:
   18842           0 :                 *AType = 0;
   18843           0 :                 *QType = 0;
   18844           0 :                 *b_min = FIX_MIN;
   18845           0 :                 *b_max = FIX_MAX;
   18846           0 :                 return 1;
   18847             :         case 20:
   18848           0 :                 *AType = 0;
   18849           0 :                 *QType = 0;
   18850           0 :                 *b_min = FIX_MIN;
   18851           0 :                 *b_max = FIX_MAX;
   18852           0 :                 return 1;
   18853             :         case 21:
   18854           0 :                 *AType = 0;
   18855           0 :                 *QType = 0;
   18856           0 :                 *b_min = FIX_MIN;
   18857           0 :                 *b_max = FIX_MAX;
   18858           0 :                 return 1;
   18859             :         case 22:
   18860           0 :                 *AType = 0;
   18861           0 :                 *QType = 0;
   18862           0 :                 *b_min = FIX_MIN;
   18863           0 :                 *b_max = FIX_MAX;
   18864           0 :                 return 1;
   18865             :         case 23:
   18866           0 :                 *AType = 0;
   18867           0 :                 *QType = 0;
   18868           0 :                 *b_min = FIX_MIN;
   18869           0 :                 *b_max = FIX_MAX;
   18870           0 :                 return 1;
   18871             :         case 24:
   18872           0 :                 *AType = 0;
   18873           0 :                 *QType = 0;
   18874           0 :                 *b_min = FIX_MIN;
   18875           0 :                 *b_max = FIX_MAX;
   18876           0 :                 return 1;
   18877             :         case 25:
   18878           0 :                 *AType = 0;
   18879           0 :                 *QType = 0;
   18880           0 :                 *b_min = FIX_MIN;
   18881           0 :                 *b_max = FIX_MAX;
   18882           0 :                 return 1;
   18883             :         case 26:
   18884           0 :                 *AType = 0;
   18885           0 :                 *QType = 0;
   18886           0 :                 *b_min = FIX_MIN;
   18887           0 :                 *b_max = FIX_MAX;
   18888           0 :                 return 1;
   18889             :         case 27:
   18890           0 :                 *AType = 0;
   18891           0 :                 *QType = 0;
   18892           0 :                 *b_min = FIX_MIN;
   18893           0 :                 *b_max = FIX_MAX;
   18894           0 :                 return 1;
   18895             :         case 28:
   18896           0 :                 *AType = 0;
   18897           0 :                 *QType = 0;
   18898           0 :                 *b_min = FIX_MIN;
   18899           0 :                 *b_max = FIX_MAX;
   18900           0 :                 return 1;
   18901             :         case 29:
   18902           0 :                 *AType = 0;
   18903           0 :                 *QType = 0;
   18904           0 :                 *b_min = FIX_MIN;
   18905           0 :                 *b_max = FIX_MAX;
   18906           0 :                 return 1;
   18907             :         case 30:
   18908           0 :                 *AType = 0;
   18909           0 :                 *QType = 0;
   18910           0 :                 *b_min = FIX_MIN;
   18911           0 :                 *b_max = FIX_MAX;
   18912           0 :                 return 1;
   18913             :         case 31:
   18914           0 :                 *AType = 0;
   18915           0 :                 *QType = 0;
   18916           0 :                 *b_min = FIX_MIN;
   18917           0 :                 *b_max = FIX_MAX;
   18918           0 :                 return 1;
   18919             :         case 32:
   18920           0 :                 *AType = 0;
   18921           0 :                 *QType = 0;
   18922           0 :                 *b_min = FIX_MIN;
   18923           0 :                 *b_max = FIX_MAX;
   18924           0 :                 return 1;
   18925             :         case 33:
   18926           0 :                 *AType = 0;
   18927           0 :                 *QType = 0;
   18928           0 :                 *b_min = FIX_MIN;
   18929           0 :                 *b_max = FIX_MAX;
   18930           0 :                 return 1;
   18931             :         case 34:
   18932           0 :                 *AType = 0;
   18933           0 :                 *QType = 0;
   18934           0 :                 *b_min = FIX_MIN;
   18935           0 :                 *b_max = FIX_MAX;
   18936           0 :                 return 1;
   18937             :         case 35:
   18938           0 :                 *AType = 0;
   18939           0 :                 *QType = 0;
   18940           0 :                 *b_min = FIX_MIN;
   18941           0 :                 *b_max = FIX_MAX;
   18942           0 :                 return 1;
   18943             :         case 36:
   18944           0 :                 *AType = 0;
   18945           0 :                 *QType = 0;
   18946           0 :                 *b_min = FIX_MIN;
   18947           0 :                 *b_max = FIX_MAX;
   18948           0 :                 return 1;
   18949             :         case 37:
   18950           0 :                 *AType = 0;
   18951           0 :                 *QType = 0;
   18952           0 :                 *b_min = FIX_MIN;
   18953           0 :                 *b_max = FIX_MAX;
   18954           0 :                 return 1;
   18955             :         case 38:
   18956           0 :                 *AType = 0;
   18957           0 :                 *QType = 0;
   18958           0 :                 *b_min = FIX_MIN;
   18959           0 :                 *b_max = FIX_MAX;
   18960           0 :                 return 1;
   18961             :         case 39:
   18962           0 :                 *AType = 0;
   18963           0 :                 *QType = 0;
   18964           0 :                 *b_min = FIX_MIN;
   18965           0 :                 *b_max = FIX_MAX;
   18966           0 :                 return 1;
   18967             :         case 40:
   18968           0 :                 *AType = 0;
   18969           0 :                 *QType = 0;
   18970           0 :                 *b_min = FIX_MIN;
   18971           0 :                 *b_max = FIX_MAX;
   18972           0 :                 return 1;
   18973             :         case 41:
   18974           0 :                 *AType = 0;
   18975           0 :                 *QType = 0;
   18976           0 :                 *b_min = FIX_MIN;
   18977           0 :                 *b_max = FIX_MAX;
   18978           0 :                 return 1;
   18979             :         case 42:
   18980           0 :                 *AType = 0;
   18981           0 :                 *QType = 0;
   18982           0 :                 *b_min = FIX_MIN;
   18983           0 :                 *b_max = FIX_MAX;
   18984           0 :                 return 1;
   18985             :         case 43:
   18986           0 :                 *AType = 0;
   18987           0 :                 *QType = 0;
   18988           0 :                 *b_min = FIX_MIN;
   18989           0 :                 *b_max = FIX_MAX;
   18990           0 :                 return 1;
   18991             :         case 44:
   18992           0 :                 *AType = 0;
   18993           0 :                 *QType = 0;
   18994           0 :                 *b_min = FIX_MIN;
   18995           0 :                 *b_max = FIX_MAX;
   18996           0 :                 return 1;
   18997             :         case 45:
   18998           0 :                 *AType = 0;
   18999           0 :                 *QType = 0;
   19000           0 :                 *b_min = FIX_MIN;
   19001           0 :                 *b_max = FIX_MAX;
   19002           0 :                 return 1;
   19003             :         case 46:
   19004           0 :                 *AType = 0;
   19005           0 :                 *QType = 0;
   19006           0 :                 *b_min = FIX_MIN;
   19007           0 :                 *b_max = FIX_MAX;
   19008           0 :                 return 1;
   19009             :         case 47:
   19010           0 :                 *AType = 0;
   19011           0 :                 *QType = 0;
   19012           0 :                 *b_min = FIX_MIN;
   19013           0 :                 *b_max = FIX_MAX;
   19014           0 :                 return 1;
   19015             :         case 48:
   19016           0 :                 *AType = 0;
   19017           0 :                 *QType = 0;
   19018           0 :                 *b_min = FIX_MIN;
   19019           0 :                 *b_max = FIX_MAX;
   19020           0 :                 return 1;
   19021             :         case 49:
   19022           0 :                 *AType = 0;
   19023           0 :                 *QType = 0;
   19024           0 :                 *b_min = FIX_MIN;
   19025           0 :                 *b_max = FIX_MAX;
   19026           0 :                 return 1;
   19027             :         case 50:
   19028           0 :                 *AType = 0;
   19029           0 :                 *QType = 0;
   19030           0 :                 *b_min = FIX_MIN;
   19031           0 :                 *b_max = FIX_MAX;
   19032           0 :                 return 1;
   19033             :         case 51:
   19034           0 :                 *AType = 0;
   19035           0 :                 *QType = 0;
   19036           0 :                 *b_min = FIX_MIN;
   19037           0 :                 *b_max = FIX_MAX;
   19038           0 :                 return 1;
   19039             :         case 52:
   19040           0 :                 *AType = 0;
   19041           0 :                 *QType = 0;
   19042           0 :                 *b_min = FIX_MIN;
   19043           0 :                 *b_max = FIX_MAX;
   19044           0 :                 return 1;
   19045             :         case 53:
   19046           0 :                 *AType = 0;
   19047           0 :                 *QType = 0;
   19048           0 :                 *b_min = FIX_MIN;
   19049           0 :                 *b_max = FIX_MAX;
   19050           0 :                 return 1;
   19051             :         case 54:
   19052           0 :                 *AType = 0;
   19053           0 :                 *QType = 0;
   19054           0 :                 *b_min = FIX_MIN;
   19055           0 :                 *b_max = FIX_MAX;
   19056           0 :                 return 1;
   19057             :         case 55:
   19058           0 :                 *AType = 0;
   19059           0 :                 *QType = 0;
   19060           0 :                 *b_min = FIX_MIN;
   19061           0 :                 *b_max = FIX_MAX;
   19062           0 :                 return 1;
   19063             :         case 56:
   19064           0 :                 *AType = 0;
   19065           0 :                 *QType = 0;
   19066           0 :                 *b_min = FIX_MIN;
   19067           0 :                 *b_max = FIX_MAX;
   19068           0 :                 return 1;
   19069             :         case 57:
   19070           0 :                 *AType = 0;
   19071           0 :                 *QType = 0;
   19072           0 :                 *b_min = FIX_MIN;
   19073           0 :                 *b_max = FIX_MAX;
   19074           0 :                 return 1;
   19075             :         case 58:
   19076           0 :                 *AType = 0;
   19077           0 :                 *QType = 0;
   19078           0 :                 *b_min = FIX_MIN;
   19079           0 :                 *b_max = FIX_MAX;
   19080           0 :                 return 1;
   19081             :         case 59:
   19082           0 :                 *AType = 0;
   19083           0 :                 *QType = 0;
   19084           0 :                 *b_min = FIX_MIN;
   19085           0 :                 *b_max = FIX_MAX;
   19086           0 :                 return 1;
   19087             :         case 60:
   19088           0 :                 *AType = 0;
   19089           0 :                 *QType = 0;
   19090           0 :                 *b_min = FIX_MIN;
   19091           0 :                 *b_max = FIX_MAX;
   19092           0 :                 return 1;
   19093             :         case 61:
   19094           0 :                 *AType = 0;
   19095           0 :                 *QType = 0;
   19096           0 :                 *b_min = FIX_MIN;
   19097           0 :                 *b_max = FIX_MAX;
   19098           0 :                 return 1;
   19099             :         case 62:
   19100           0 :                 *AType = 0;
   19101           0 :                 *QType = 0;
   19102           0 :                 *b_min = FIX_MIN;
   19103           0 :                 *b_max = FIX_MAX;
   19104           0 :                 return 1;
   19105             :         case 63:
   19106           0 :                 *AType = 0;
   19107           0 :                 *QType = 0;
   19108           0 :                 *b_min = FIX_MIN;
   19109           0 :                 *b_max = FIX_MAX;
   19110           0 :                 return 1;
   19111             :         case 64:
   19112           0 :                 *AType = 0;
   19113           0 :                 *QType = 0;
   19114           0 :                 *b_min = FIX_MIN;
   19115           0 :                 *b_max = FIX_MAX;
   19116           0 :                 return 1;
   19117             :         case 65:
   19118           0 :                 *AType = 0;
   19119           0 :                 *QType = 0;
   19120           0 :                 *b_min = FIX_MIN;
   19121           0 :                 *b_max = FIX_MAX;
   19122           0 :                 return 1;
   19123             :         case 66:
   19124           0 :                 *AType = 0;
   19125           0 :                 *QType = 0;
   19126           0 :                 *b_min = FIX_MIN;
   19127           0 :                 *b_max = FIX_MAX;
   19128           0 :                 return 1;
   19129             :         case 67:
   19130           0 :                 *AType = 0;
   19131           0 :                 *QType = 0;
   19132           0 :                 *b_min = FIX_MIN;
   19133           0 :                 *b_max = FIX_MAX;
   19134           0 :                 return 1;
   19135             :         case 68:
   19136           0 :                 *AType = 0;
   19137           0 :                 *QType = 0;
   19138           0 :                 *b_min = FIX_MIN;
   19139           0 :                 *b_max = FIX_MAX;
   19140           0 :                 return 1;
   19141             :         case 69:
   19142           0 :                 *AType = 0;
   19143           0 :                 *QType = 0;
   19144           0 :                 *b_min = FIX_MIN;
   19145           0 :                 *b_max = FIX_MAX;
   19146           0 :                 return 1;
   19147             :         case 70:
   19148           0 :                 *AType = 0;
   19149           0 :                 *QType = 0;
   19150           0 :                 *b_min = FIX_MIN;
   19151           0 :                 *b_max = FIX_MAX;
   19152           0 :                 return 1;
   19153             :         case 71:
   19154           0 :                 *AType = 0;
   19155           0 :                 *QType = 0;
   19156           0 :                 *b_min = FIX_MIN;
   19157           0 :                 *b_max = FIX_MAX;
   19158           0 :                 return 1;
   19159             :         case 72:
   19160           0 :                 *AType = 0;
   19161           0 :                 *QType = 0;
   19162           0 :                 *b_min = FIX_MIN;
   19163           0 :                 *b_max = FIX_MAX;
   19164           0 :                 return 1;
   19165             :         case 73:
   19166           0 :                 *AType = 0;
   19167           0 :                 *QType = 0;
   19168           0 :                 *b_min = FIX_MIN;
   19169           0 :                 *b_max = FIX_MAX;
   19170           0 :                 return 1;
   19171             :         case 74:
   19172           0 :                 *AType = 0;
   19173           0 :                 *QType = 0;
   19174           0 :                 *b_min = FIX_MIN;
   19175           0 :                 *b_max = FIX_MAX;
   19176           0 :                 return 1;
   19177             :         case 75:
   19178           0 :                 *AType = 0;
   19179           0 :                 *QType = 0;
   19180           0 :                 *b_min = FIX_MIN;
   19181           0 :                 *b_max = FIX_MAX;
   19182           0 :                 return 1;
   19183             :         case 76:
   19184           0 :                 *AType = 0;
   19185           0 :                 *QType = 0;
   19186           0 :                 *b_min = FIX_MIN;
   19187           0 :                 *b_max = FIX_MAX;
   19188           0 :                 return 1;
   19189             :         case 77:
   19190           0 :                 *AType = 0;
   19191           0 :                 *QType = 0;
   19192           0 :                 *b_min = FIX_MIN;
   19193           0 :                 *b_max = FIX_MAX;
   19194           0 :                 return 1;
   19195             :         case 78:
   19196           0 :                 *AType = 0;
   19197           0 :                 *QType = 0;
   19198           0 :                 *b_min = FIX_MIN;
   19199           0 :                 *b_max = FIX_MAX;
   19200           0 :                 return 1;
   19201             :         case 79:
   19202           0 :                 *AType = 0;
   19203           0 :                 *QType = 0;
   19204           0 :                 *b_min = FIX_MIN;
   19205           0 :                 *b_max = FIX_MAX;
   19206           0 :                 return 1;
   19207             :         case 80:
   19208           0 :                 *AType = 0;
   19209           0 :                 *QType = 0;
   19210           0 :                 *b_min = FIX_MIN;
   19211           0 :                 *b_max = FIX_MAX;
   19212           0 :                 return 1;
   19213             :         case 81:
   19214           0 :                 *AType = 0;
   19215           0 :                 *QType = 0;
   19216           0 :                 *b_min = FIX_MIN;
   19217           0 :                 *b_max = FIX_MAX;
   19218           0 :                 return 1;
   19219             :         case 82:
   19220           0 :                 *AType = 0;
   19221           0 :                 *QType = 0;
   19222           0 :                 *b_min = FIX_MIN;
   19223           0 :                 *b_max = FIX_MAX;
   19224           0 :                 return 1;
   19225             :         case 83:
   19226           0 :                 *AType = 0;
   19227           0 :                 *QType = 0;
   19228           0 :                 *b_min = FIX_MIN;
   19229           0 :                 *b_max = FIX_MAX;
   19230           0 :                 return 1;
   19231             :         case 84:
   19232           0 :                 *AType = 0;
   19233           0 :                 *QType = 0;
   19234           0 :                 *b_min = FIX_MIN;
   19235           0 :                 *b_max = FIX_MAX;
   19236           0 :                 return 1;
   19237             :         case 85:
   19238           0 :                 *AType = 0;
   19239           0 :                 *QType = 0;
   19240           0 :                 *b_min = FIX_MIN;
   19241           0 :                 *b_max = FIX_MAX;
   19242           0 :                 return 1;
   19243             :         case 86:
   19244           0 :                 *AType = 0;
   19245           0 :                 *QType = 0;
   19246           0 :                 *b_min = FIX_MIN;
   19247           0 :                 *b_max = FIX_MAX;
   19248           0 :                 return 1;
   19249             :         case 87:
   19250           0 :                 *AType = 0;
   19251           0 :                 *QType = 0;
   19252           0 :                 *b_min = FIX_MIN;
   19253           0 :                 *b_max = FIX_MAX;
   19254           0 :                 return 1;
   19255             :         case 88:
   19256           0 :                 *AType = 0;
   19257           0 :                 *QType = 0;
   19258           0 :                 *b_min = FIX_MIN;
   19259           0 :                 *b_max = FIX_MAX;
   19260           0 :                 return 1;
   19261             :         case 89:
   19262           0 :                 *AType = 0;
   19263           0 :                 *QType = 0;
   19264           0 :                 *b_min = FIX_MIN;
   19265           0 :                 *b_max = FIX_MAX;
   19266           0 :                 return 1;
   19267             :         case 90:
   19268           0 :                 *AType = 0;
   19269           0 :                 *QType = 0;
   19270           0 :                 *b_min = FIX_MIN;
   19271           0 :                 *b_max = FIX_MAX;
   19272           0 :                 return 1;
   19273             :         case 91:
   19274           0 :                 *AType = 0;
   19275           0 :                 *QType = 0;
   19276           0 :                 *b_min = FIX_MIN;
   19277           0 :                 *b_max = FIX_MAX;
   19278           0 :                 return 1;
   19279             :         case 92:
   19280           0 :                 *AType = 0;
   19281           0 :                 *QType = 0;
   19282           0 :                 *b_min = FIX_MIN;
   19283           0 :                 *b_max = FIX_MAX;
   19284           0 :                 return 1;
   19285             :         case 93:
   19286           0 :                 *AType = 0;
   19287           0 :                 *QType = 0;
   19288           0 :                 *b_min = FIX_MIN;
   19289           0 :                 *b_max = FIX_MAX;
   19290           0 :                 return 1;
   19291             :         case 94:
   19292           0 :                 *AType = 0;
   19293           0 :                 *QType = 0;
   19294           0 :                 *b_min = FIX_MIN;
   19295           0 :                 *b_max = FIX_MAX;
   19296           0 :                 return 1;
   19297             :         case 95:
   19298           0 :                 *AType = 0;
   19299           0 :                 *QType = 0;
   19300           0 :                 *b_min = FIX_MIN;
   19301           0 :                 *b_max = FIX_MAX;
   19302           0 :                 return 1;
   19303             :         case 96:
   19304           0 :                 *AType = 0;
   19305           0 :                 *QType = 0;
   19306           0 :                 *b_min = FIX_MIN;
   19307           0 :                 *b_max = FIX_MAX;
   19308           0 :                 return 1;
   19309             :         case 97:
   19310           0 :                 *AType = 0;
   19311           0 :                 *QType = 0;
   19312           0 :                 *b_min = FIX_MIN;
   19313           0 :                 *b_max = FIX_MAX;
   19314           0 :                 return 1;
   19315             :         case 98:
   19316           0 :                 *AType = 0;
   19317           0 :                 *QType = 0;
   19318           0 :                 *b_min = FIX_MIN;
   19319           0 :                 *b_max = FIX_MAX;
   19320           0 :                 return 1;
   19321             :         case 99:
   19322           0 :                 *AType = 0;
   19323           0 :                 *QType = 0;
   19324           0 :                 *b_min = FIX_MIN;
   19325           0 :                 *b_max = FIX_MAX;
   19326           0 :                 return 1;
   19327             :         case 100:
   19328           0 :                 *AType = 0;
   19329           0 :                 *QType = 0;
   19330           0 :                 *b_min = FIX_MIN;
   19331           0 :                 *b_max = FIX_MAX;
   19332           0 :                 return 1;
   19333             :         case 101:
   19334           0 :                 *AType = 0;
   19335           0 :                 *QType = 0;
   19336           0 :                 *b_min = FIX_MIN;
   19337           0 :                 *b_max = FIX_MAX;
   19338           0 :                 return 1;
   19339             :         case 102:
   19340           0 :                 *AType = 0;
   19341           0 :                 *QType = 0;
   19342           0 :                 *b_min = FIX_MIN;
   19343           0 :                 *b_max = FIX_MAX;
   19344           0 :                 return 1;
   19345             :         case 103:
   19346           0 :                 *AType = 0;
   19347           0 :                 *QType = 0;
   19348           0 :                 *b_min = FIX_MIN;
   19349           0 :                 *b_max = FIX_MAX;
   19350           0 :                 return 1;
   19351             :         case 104:
   19352           0 :                 *AType = 0;
   19353           0 :                 *QType = 0;
   19354           0 :                 *b_min = FIX_MIN;
   19355           0 :                 *b_max = FIX_MAX;
   19356           0 :                 return 1;
   19357             :         case 105:
   19358           0 :                 *AType = 0;
   19359           0 :                 *QType = 0;
   19360           0 :                 *b_min = FIX_MIN;
   19361           0 :                 *b_max = FIX_MAX;
   19362           0 :                 return 1;
   19363             :         case 106:
   19364           0 :                 *AType = 0;
   19365           0 :                 *QType = 0;
   19366           0 :                 *b_min = FIX_MIN;
   19367           0 :                 *b_max = FIX_MAX;
   19368           0 :                 return 1;
   19369             :         case 107:
   19370           0 :                 *AType = 0;
   19371           0 :                 *QType = 0;
   19372           0 :                 *b_min = FIX_MIN;
   19373           0 :                 *b_max = FIX_MAX;
   19374           0 :                 return 1;
   19375             :         case 108:
   19376           0 :                 *AType = 0;
   19377           0 :                 *QType = 0;
   19378           0 :                 *b_min = FIX_MIN;
   19379           0 :                 *b_max = FIX_MAX;
   19380           0 :                 return 1;
   19381             :         case 109:
   19382           0 :                 *AType = 0;
   19383           0 :                 *QType = 0;
   19384           0 :                 *b_min = FIX_MIN;
   19385           0 :                 *b_max = FIX_MAX;
   19386           0 :                 return 1;
   19387             :         case 110:
   19388           0 :                 *AType = 0;
   19389           0 :                 *QType = 0;
   19390           0 :                 *b_min = FIX_MIN;
   19391           0 :                 *b_max = FIX_MAX;
   19392           0 :                 return 1;
   19393             :         case 111:
   19394           0 :                 *AType = 0;
   19395           0 :                 *QType = 0;
   19396           0 :                 *b_min = FIX_MIN;
   19397           0 :                 *b_max = FIX_MAX;
   19398           0 :                 return 1;
   19399             :         case 112:
   19400           0 :                 *AType = 0;
   19401           0 :                 *QType = 0;
   19402           0 :                 *b_min = FIX_MIN;
   19403           0 :                 *b_max = FIX_MAX;
   19404           0 :                 return 1;
   19405             :         case 113:
   19406           0 :                 *AType = 0;
   19407           0 :                 *QType = 0;
   19408           0 :                 *b_min = FIX_MIN;
   19409           0 :                 *b_max = FIX_MAX;
   19410           0 :                 return 1;
   19411             :         case 114:
   19412           0 :                 *AType = 0;
   19413           0 :                 *QType = 0;
   19414           0 :                 *b_min = FIX_MIN;
   19415           0 :                 *b_max = FIX_MAX;
   19416           0 :                 return 1;
   19417             :         case 115:
   19418           0 :                 *AType = 0;
   19419           0 :                 *QType = 0;
   19420           0 :                 *b_min = FIX_MIN;
   19421           0 :                 *b_max = FIX_MAX;
   19422           0 :                 return 1;
   19423             :         case 116:
   19424           0 :                 *AType = 0;
   19425           0 :                 *QType = 0;
   19426           0 :                 *b_min = FIX_MIN;
   19427           0 :                 *b_max = FIX_MAX;
   19428           0 :                 return 1;
   19429             :         case 117:
   19430           0 :                 *AType = 0;
   19431           0 :                 *QType = 0;
   19432           0 :                 *b_min = FIX_MIN;
   19433           0 :                 *b_max = FIX_MAX;
   19434           0 :                 return 1;
   19435             :         case 118:
   19436           0 :                 *AType = 0;
   19437           0 :                 *QType = 0;
   19438           0 :                 *b_min = FIX_MIN;
   19439           0 :                 *b_max = FIX_MAX;
   19440           0 :                 return 1;
   19441             :         case 119:
   19442           0 :                 *AType = 0;
   19443           0 :                 *QType = 0;
   19444           0 :                 *b_min = FIX_MIN;
   19445           0 :                 *b_max = FIX_MAX;
   19446           0 :                 return 1;
   19447             :         case 120:
   19448           0 :                 *AType = 0;
   19449           0 :                 *QType = 0;
   19450           0 :                 *b_min = FIX_MIN;
   19451           0 :                 *b_max = FIX_MAX;
   19452           0 :                 return 1;
   19453             :         case 121:
   19454           0 :                 *AType = 0;
   19455           0 :                 *QType = 0;
   19456           0 :                 *b_min = FIX_MIN;
   19457           0 :                 *b_max = FIX_MAX;
   19458           0 :                 return 1;
   19459             :         case 122:
   19460           0 :                 *AType = 0;
   19461           0 :                 *QType = 0;
   19462           0 :                 *b_min = FIX_MIN;
   19463           0 :                 *b_max = FIX_MAX;
   19464           0 :                 return 1;
   19465             :         case 123:
   19466           0 :                 *AType = 0;
   19467           0 :                 *QType = 0;
   19468           0 :                 *b_min = FIX_MIN;
   19469           0 :                 *b_max = FIX_MAX;
   19470           0 :                 return 1;
   19471             :         case 124:
   19472           0 :                 *AType = 0;
   19473           0 :                 *QType = 0;
   19474           0 :                 *b_min = FIX_MIN;
   19475           0 :                 *b_max = FIX_MAX;
   19476           0 :                 return 1;
   19477             :         case 125:
   19478           0 :                 *AType = 0;
   19479           0 :                 *QType = 0;
   19480           0 :                 *b_min = FIX_MIN;
   19481           0 :                 *b_max = FIX_MAX;
   19482           0 :                 return 1;
   19483             :         case 126:
   19484           0 :                 *AType = 0;
   19485           0 :                 *QType = 0;
   19486           0 :                 *b_min = FIX_MIN;
   19487           0 :                 *b_max = FIX_MAX;
   19488           0 :                 return 1;
   19489             :         case 127:
   19490           0 :                 *AType = 0;
   19491           0 :                 *QType = 0;
   19492           0 :                 *b_min = FIX_MIN;
   19493           0 :                 *b_max = FIX_MAX;
   19494           0 :                 return 1;
   19495             :         case 128:
   19496           0 :                 *AType = 0;
   19497           0 :                 *QType = 0;
   19498           0 :                 *b_min = FIX_MIN;
   19499           0 :                 *b_max = FIX_MAX;
   19500           0 :                 return 1;
   19501             :         case 129:
   19502           0 :                 *AType = 0;
   19503           0 :                 *QType = 0;
   19504           0 :                 *b_min = FIX_MIN;
   19505           0 :                 *b_max = FIX_MAX;
   19506           0 :                 return 1;
   19507             :         case 130:
   19508           0 :                 *AType = 0;
   19509           0 :                 *QType = 0;
   19510           0 :                 *b_min = FIX_MIN;
   19511           0 :                 *b_max = FIX_MAX;
   19512           0 :                 return 1;
   19513             :         case 131:
   19514           0 :                 *AType = 0;
   19515           0 :                 *QType = 0;
   19516           0 :                 *b_min = FIX_MIN;
   19517           0 :                 *b_max = FIX_MAX;
   19518           0 :                 return 1;
   19519             :         case 132:
   19520           0 :                 *AType = 0;
   19521           0 :                 *QType = 0;
   19522           0 :                 *b_min = FIX_MIN;
   19523           0 :                 *b_max = FIX_MAX;
   19524           0 :                 return 1;
   19525             :         case 133:
   19526           0 :                 *AType = 0;
   19527           0 :                 *QType = 0;
   19528           0 :                 *b_min = FIX_MIN;
   19529           0 :                 *b_max = FIX_MAX;
   19530           0 :                 return 1;
   19531             :         case 134:
   19532           0 :                 *AType = 0;
   19533           0 :                 *QType = 0;
   19534           0 :                 *b_min = FIX_MIN;
   19535           0 :                 *b_max = FIX_MAX;
   19536           0 :                 return 1;
   19537             :         case 135:
   19538           0 :                 *AType = 0;
   19539           0 :                 *QType = 0;
   19540           0 :                 *b_min = FIX_MIN;
   19541           0 :                 *b_max = FIX_MAX;
   19542           0 :                 return 1;
   19543             :         case 136:
   19544           0 :                 *AType = 0;
   19545           0 :                 *QType = 0;
   19546           0 :                 *b_min = FIX_MIN;
   19547           0 :                 *b_max = FIX_MAX;
   19548           0 :                 return 1;
   19549             :         case 137:
   19550           0 :                 *AType = 0;
   19551           0 :                 *QType = 0;
   19552           0 :                 *b_min = FIX_MIN;
   19553           0 :                 *b_max = FIX_MAX;
   19554           0 :                 return 1;
   19555             :         case 138:
   19556           0 :                 *AType = 0;
   19557           0 :                 *QType = 0;
   19558           0 :                 *b_min = FIX_MIN;
   19559           0 :                 *b_max = FIX_MAX;
   19560           0 :                 return 1;
   19561             :         case 139:
   19562           0 :                 *AType = 0;
   19563           0 :                 *QType = 0;
   19564           0 :                 *b_min = FIX_MIN;
   19565           0 :                 *b_max = FIX_MAX;
   19566           0 :                 return 1;
   19567             :         case 140:
   19568           0 :                 *AType = 0;
   19569           0 :                 *QType = 0;
   19570           0 :                 *b_min = FIX_MIN;
   19571           0 :                 *b_max = FIX_MAX;
   19572           0 :                 return 1;
   19573             :         case 141:
   19574           0 :                 *AType = 0;
   19575           0 :                 *QType = 0;
   19576           0 :                 *b_min = FIX_MIN;
   19577           0 :                 *b_max = FIX_MAX;
   19578           0 :                 return 1;
   19579             :         case 142:
   19580           0 :                 *AType = 0;
   19581           0 :                 *QType = 0;
   19582           0 :                 *b_min = FIX_MIN;
   19583           0 :                 *b_max = FIX_MAX;
   19584           0 :                 return 1;
   19585             :         case 143:
   19586           0 :                 *AType = 0;
   19587           0 :                 *QType = 0;
   19588           0 :                 *b_min = FIX_MIN;
   19589           0 :                 *b_max = FIX_MAX;
   19590           0 :                 return 1;
   19591             :         case 144:
   19592           0 :                 *AType = 0;
   19593           0 :                 *QType = 0;
   19594           0 :                 *b_min = FIX_MIN;
   19595           0 :                 *b_max = FIX_MAX;
   19596           0 :                 return 1;
   19597             :         case 145:
   19598           0 :                 *AType = 0;
   19599           0 :                 *QType = 0;
   19600           0 :                 *b_min = FIX_MIN;
   19601           0 :                 *b_max = FIX_MAX;
   19602           0 :                 return 1;
   19603             :         case 146:
   19604           0 :                 *AType = 0;
   19605           0 :                 *QType = 0;
   19606           0 :                 *b_min = FIX_MIN;
   19607           0 :                 *b_max = FIX_MAX;
   19608           0 :                 return 1;
   19609             :         case 147:
   19610           0 :                 *AType = 0;
   19611           0 :                 *QType = 0;
   19612           0 :                 *b_min = FIX_MIN;
   19613           0 :                 *b_max = FIX_MAX;
   19614           0 :                 return 1;
   19615             :         case 148:
   19616           0 :                 *AType = 0;
   19617           0 :                 *QType = 0;
   19618           0 :                 *b_min = FIX_MIN;
   19619           0 :                 *b_max = FIX_MAX;
   19620           0 :                 return 1;
   19621             :         case 149:
   19622           0 :                 *AType = 0;
   19623           0 :                 *QType = 0;
   19624           0 :                 *b_min = FIX_MIN;
   19625           0 :                 *b_max = FIX_MAX;
   19626           0 :                 return 1;
   19627             :         case 150:
   19628           0 :                 *AType = 0;
   19629           0 :                 *QType = 0;
   19630           0 :                 *b_min = FIX_MIN;
   19631           0 :                 *b_max = FIX_MAX;
   19632           0 :                 return 1;
   19633             :         case 151:
   19634           0 :                 *AType = 0;
   19635           0 :                 *QType = 0;
   19636           0 :                 *b_min = FIX_MIN;
   19637           0 :                 *b_max = FIX_MAX;
   19638           0 :                 return 1;
   19639             :         case 152:
   19640           0 :                 *AType = 0;
   19641           0 :                 *QType = 0;
   19642           0 :                 *b_min = FIX_MIN;
   19643           0 :                 *b_max = FIX_MAX;
   19644           0 :                 return 1;
   19645             :         case 153:
   19646           0 :                 *AType = 0;
   19647           0 :                 *QType = 0;
   19648           0 :                 *b_min = FIX_MIN;
   19649           0 :                 *b_max = FIX_MAX;
   19650           0 :                 return 1;
   19651             :         case 154:
   19652           0 :                 *AType = 0;
   19653           0 :                 *QType = 0;
   19654           0 :                 *b_min = FIX_MIN;
   19655           0 :                 *b_max = FIX_MAX;
   19656           0 :                 return 1;
   19657             :         case 155:
   19658           0 :                 *AType = 0;
   19659           0 :                 *QType = 0;
   19660           0 :                 *b_min = FIX_MIN;
   19661           0 :                 *b_max = FIX_MAX;
   19662           0 :                 return 1;
   19663             :         case 156:
   19664           0 :                 *AType = 0;
   19665           0 :                 *QType = 0;
   19666           0 :                 *b_min = FIX_MIN;
   19667           0 :                 *b_max = FIX_MAX;
   19668           0 :                 return 1;
   19669             :         case 157:
   19670           0 :                 *AType = 0;
   19671           0 :                 *QType = 0;
   19672           0 :                 *b_min = FIX_MIN;
   19673           0 :                 *b_max = FIX_MAX;
   19674           0 :                 return 1;
   19675             :         case 158:
   19676           0 :                 *AType = 0;
   19677           0 :                 *QType = 0;
   19678           0 :                 *b_min = FIX_MIN;
   19679           0 :                 *b_max = FIX_MAX;
   19680           0 :                 return 1;
   19681             :         case 159:
   19682           0 :                 *AType = 0;
   19683           0 :                 *QType = 0;
   19684           0 :                 *b_min = FIX_MIN;
   19685           0 :                 *b_max = FIX_MAX;
   19686           0 :                 return 1;
   19687             :         case 160:
   19688           0 :                 *AType = 0;
   19689           0 :                 *QType = 0;
   19690           0 :                 *b_min = FIX_MIN;
   19691           0 :                 *b_max = FIX_MAX;
   19692           0 :                 return 1;
   19693             :         case 161:
   19694           0 :                 *AType = 0;
   19695           0 :                 *QType = 0;
   19696           0 :                 *b_min = FIX_MIN;
   19697           0 :                 *b_max = FIX_MAX;
   19698           0 :                 return 1;
   19699             :         case 162:
   19700           0 :                 *AType = 0;
   19701           0 :                 *QType = 0;
   19702           0 :                 *b_min = FIX_MIN;
   19703           0 :                 *b_max = FIX_MAX;
   19704           0 :                 return 1;
   19705             :         case 163:
   19706           0 :                 *AType = 0;
   19707           0 :                 *QType = 0;
   19708           0 :                 *b_min = FIX_MIN;
   19709           0 :                 *b_max = FIX_MAX;
   19710           0 :                 return 1;
   19711             :         case 164:
   19712           0 :                 *AType = 0;
   19713           0 :                 *QType = 0;
   19714           0 :                 *b_min = FIX_MIN;
   19715           0 :                 *b_max = FIX_MAX;
   19716           0 :                 return 1;
   19717             :         case 165:
   19718           0 :                 *AType = 0;
   19719           0 :                 *QType = 0;
   19720           0 :                 *b_min = FIX_MIN;
   19721           0 :                 *b_max = FIX_MAX;
   19722           0 :                 return 1;
   19723             :         case 166:
   19724           0 :                 *AType = 0;
   19725           0 :                 *QType = 0;
   19726           0 :                 *b_min = FIX_MIN;
   19727           0 :                 *b_max = FIX_MAX;
   19728           0 :                 return 1;
   19729             :         case 167:
   19730           0 :                 *AType = 0;
   19731           0 :                 *QType = 0;
   19732           0 :                 *b_min = FIX_MIN;
   19733           0 :                 *b_max = FIX_MAX;
   19734           0 :                 return 1;
   19735             :         case 168:
   19736           0 :                 *AType = 0;
   19737           0 :                 *QType = 0;
   19738           0 :                 *b_min = FIX_MIN;
   19739           0 :                 *b_max = FIX_MAX;
   19740           0 :                 return 1;
   19741             :         case 169:
   19742           0 :                 *AType = 0;
   19743           0 :                 *QType = 0;
   19744           0 :                 *b_min = FIX_MIN;
   19745           0 :                 *b_max = FIX_MAX;
   19746           0 :                 return 1;
   19747             :         case 170:
   19748           0 :                 *AType = 0;
   19749           0 :                 *QType = 0;
   19750           0 :                 *b_min = FIX_MIN;
   19751           0 :                 *b_max = FIX_MAX;
   19752           0 :                 return 1;
   19753             :         case 171:
   19754           0 :                 *AType = 0;
   19755           0 :                 *QType = 0;
   19756           0 :                 *b_min = FIX_MIN;
   19757           0 :                 *b_max = FIX_MAX;
   19758           0 :                 return 1;
   19759             :         case 172:
   19760           0 :                 *AType = 0;
   19761           0 :                 *QType = 0;
   19762           0 :                 *b_min = FIX_MIN;
   19763           0 :                 *b_max = FIX_MAX;
   19764           0 :                 return 1;
   19765             :         case 173:
   19766           0 :                 *AType = 0;
   19767           0 :                 *QType = 0;
   19768           0 :                 *b_min = FIX_MIN;
   19769           0 :                 *b_max = FIX_MAX;
   19770           0 :                 return 1;
   19771             :         case 174:
   19772           0 :                 *AType = 0;
   19773           0 :                 *QType = 0;
   19774           0 :                 *b_min = FIX_MIN;
   19775           0 :                 *b_max = FIX_MAX;
   19776           0 :                 return 1;
   19777             :         case 175:
   19778           0 :                 *AType = 0;
   19779           0 :                 *QType = 0;
   19780           0 :                 *b_min = FIX_MIN;
   19781           0 :                 *b_max = FIX_MAX;
   19782           0 :                 return 1;
   19783             :         case 176:
   19784           0 :                 *AType = 0;
   19785           0 :                 *QType = 0;
   19786           0 :                 *b_min = FIX_MIN;
   19787           0 :                 *b_max = FIX_MAX;
   19788           0 :                 return 1;
   19789             :         case 177:
   19790           0 :                 *AType = 0;
   19791           0 :                 *QType = 0;
   19792           0 :                 *b_min = FIX_MIN;
   19793           0 :                 *b_max = FIX_MAX;
   19794           0 :                 return 1;
   19795             :         case 178:
   19796           0 :                 *AType = 0;
   19797           0 :                 *QType = 0;
   19798           0 :                 *b_min = FIX_MIN;
   19799           0 :                 *b_max = FIX_MAX;
   19800           0 :                 return 1;
   19801             :         case 179:
   19802           0 :                 *AType = 0;
   19803           0 :                 *QType = 0;
   19804           0 :                 *b_min = FIX_MIN;
   19805           0 :                 *b_max = FIX_MAX;
   19806           0 :                 return 1;
   19807             :         case 180:
   19808           0 :                 *AType = 0;
   19809           0 :                 *QType = 0;
   19810           0 :                 *b_min = FIX_MIN;
   19811           0 :                 *b_max = FIX_MAX;
   19812           0 :                 return 1;
   19813             :         case 181:
   19814           0 :                 *AType = 0;
   19815           0 :                 *QType = 0;
   19816           0 :                 *b_min = FIX_MIN;
   19817           0 :                 *b_max = FIX_MAX;
   19818           0 :                 return 1;
   19819             :         case 182:
   19820           0 :                 *AType = 0;
   19821           0 :                 *QType = 0;
   19822           0 :                 *b_min = FIX_MIN;
   19823           0 :                 *b_max = FIX_MAX;
   19824           0 :                 return 1;
   19825             :         case 183:
   19826           0 :                 *AType = 0;
   19827           0 :                 *QType = 0;
   19828           0 :                 *b_min = FIX_MIN;
   19829           0 :                 *b_max = FIX_MAX;
   19830           0 :                 return 1;
   19831             :         case 184:
   19832           0 :                 *AType = 0;
   19833           0 :                 *QType = 0;
   19834           0 :                 *b_min = FIX_MIN;
   19835           0 :                 *b_max = FIX_MAX;
   19836           0 :                 return 1;
   19837             :         case 185:
   19838           0 :                 *AType = 0;
   19839           0 :                 *QType = 0;
   19840           0 :                 *b_min = FIX_MIN;
   19841           0 :                 *b_max = FIX_MAX;
   19842           0 :                 return 1;
   19843             :         case 186:
   19844           0 :                 *AType = 0;
   19845           0 :                 *QType = 0;
   19846           0 :                 *b_min = FIX_MIN;
   19847           0 :                 *b_max = FIX_MAX;
   19848           0 :                 return 1;
   19849             :         case 187:
   19850           0 :                 *AType = 0;
   19851           0 :                 *QType = 0;
   19852           0 :                 *b_min = FIX_MIN;
   19853           0 :                 *b_max = FIX_MAX;
   19854           0 :                 return 1;
   19855             :         case 188:
   19856           0 :                 *AType = 0;
   19857           0 :                 *QType = 0;
   19858           0 :                 *b_min = FIX_MIN;
   19859           0 :                 *b_max = FIX_MAX;
   19860           0 :                 return 1;
   19861             :         case 189:
   19862           0 :                 *AType = 0;
   19863           0 :                 *QType = 0;
   19864           0 :                 *b_min = FIX_MIN;
   19865           0 :                 *b_max = FIX_MAX;
   19866           0 :                 return 1;
   19867             :         case 190:
   19868           0 :                 *AType = 0;
   19869           0 :                 *QType = 0;
   19870           0 :                 *b_min = FIX_MIN;
   19871           0 :                 *b_max = FIX_MAX;
   19872           0 :                 return 1;
   19873             :         case 191:
   19874           0 :                 *AType = 0;
   19875           0 :                 *QType = 0;
   19876           0 :                 *b_min = FIX_MIN;
   19877           0 :                 *b_max = FIX_MAX;
   19878           0 :                 return 1;
   19879             :         case 192:
   19880           0 :                 *AType = 0;
   19881           0 :                 *QType = 0;
   19882           0 :                 *b_min = FIX_MIN;
   19883           0 :                 *b_max = FIX_MAX;
   19884           0 :                 return 1;
   19885             :         case 193:
   19886           0 :                 *AType = 0;
   19887           0 :                 *QType = 0;
   19888           0 :                 *b_min = FIX_MIN;
   19889           0 :                 *b_max = FIX_MAX;
   19890           0 :                 return 1;
   19891             :         case 194:
   19892           0 :                 *AType = 0;
   19893           0 :                 *QType = 0;
   19894           0 :                 *b_min = FIX_MIN;
   19895           0 :                 *b_max = FIX_MAX;
   19896           0 :                 return 1;
   19897             :         case 195:
   19898           0 :                 *AType = 0;
   19899           0 :                 *QType = 0;
   19900           0 :                 *b_min = FIX_MIN;
   19901           0 :                 *b_max = FIX_MAX;
   19902           0 :                 return 1;
   19903             :         case 196:
   19904           0 :                 *AType = 0;
   19905           0 :                 *QType = 0;
   19906           0 :                 *b_min = FIX_MIN;
   19907           0 :                 *b_max = FIX_MAX;
   19908           0 :                 return 1;
   19909             :         case 197:
   19910           0 :                 *AType = 0;
   19911           0 :                 *QType = 0;
   19912           0 :                 *b_min = FIX_MIN;
   19913           0 :                 *b_max = FIX_MAX;
   19914           0 :                 return 1;
   19915             :         case 198:
   19916           0 :                 *AType = 0;
   19917           0 :                 *QType = 0;
   19918           0 :                 *b_min = FIX_MIN;
   19919           0 :                 *b_max = FIX_MAX;
   19920           0 :                 return 1;
   19921             :         case 199:
   19922           0 :                 *AType = 0;
   19923           0 :                 *QType = 0;
   19924           0 :                 *b_min = FIX_MIN;
   19925           0 :                 *b_max = FIX_MAX;
   19926           0 :                 return 1;
   19927             :         case 200:
   19928           0 :                 *AType = 0;
   19929           0 :                 *QType = 0;
   19930           0 :                 *b_min = FIX_MIN;
   19931           0 :                 *b_max = FIX_MAX;
   19932           0 :                 return 1;
   19933             :         case 201:
   19934           0 :                 *AType = 0;
   19935           0 :                 *QType = 0;
   19936           0 :                 *b_min = FIX_MIN;
   19937           0 :                 *b_max = FIX_MAX;
   19938           0 :                 return 1;
   19939             :         case 202:
   19940           0 :                 *AType = 0;
   19941           0 :                 *QType = 0;
   19942           0 :                 *b_min = FIX_MIN;
   19943           0 :                 *b_max = FIX_MAX;
   19944           0 :                 return 1;
   19945             :         case 203:
   19946           0 :                 *AType = 0;
   19947           0 :                 *QType = 0;
   19948           0 :                 *b_min = FIX_MIN;
   19949           0 :                 *b_max = FIX_MAX;
   19950           0 :                 return 1;
   19951             :         case 204:
   19952           0 :                 *AType = 0;
   19953           0 :                 *QType = 0;
   19954           0 :                 *b_min = FIX_MIN;
   19955           0 :                 *b_max = FIX_MAX;
   19956           0 :                 return 1;
   19957             :         case 205:
   19958           0 :                 *AType = 0;
   19959           0 :                 *QType = 0;
   19960           0 :                 *b_min = FIX_MIN;
   19961           0 :                 *b_max = FIX_MAX;
   19962           0 :                 return 1;
   19963             :         case 206:
   19964           0 :                 *AType = 0;
   19965           0 :                 *QType = 0;
   19966           0 :                 *b_min = FIX_MIN;
   19967           0 :                 *b_max = FIX_MAX;
   19968           0 :                 return 1;
   19969             :         case 207:
   19970           0 :                 *AType = 0;
   19971           0 :                 *QType = 0;
   19972           0 :                 *b_min = FIX_MIN;
   19973           0 :                 *b_max = FIX_MAX;
   19974           0 :                 return 1;
   19975             :         case 208:
   19976           0 :                 *AType = 0;
   19977           0 :                 *QType = 0;
   19978           0 :                 *b_min = FIX_MIN;
   19979           0 :                 *b_max = FIX_MAX;
   19980           0 :                 return 1;
   19981             :         case 209:
   19982           0 :                 *AType = 0;
   19983           0 :                 *QType = 0;
   19984           0 :                 *b_min = FIX_MIN;
   19985           0 :                 *b_max = FIX_MAX;
   19986           0 :                 return 1;
   19987             :         case 210:
   19988           0 :                 *AType = 0;
   19989           0 :                 *QType = 0;
   19990           0 :                 *b_min = FIX_MIN;
   19991           0 :                 *b_max = FIX_MAX;
   19992           0 :                 return 1;
   19993             :         case 211:
   19994           0 :                 *AType = 0;
   19995           0 :                 *QType = 0;
   19996           0 :                 *b_min = FIX_MIN;
   19997           0 :                 *b_max = FIX_MAX;
   19998           0 :                 return 1;
   19999             :         case 212:
   20000           0 :                 *AType = 0;
   20001           0 :                 *QType = 0;
   20002           0 :                 *b_min = FIX_MIN;
   20003           0 :                 *b_max = FIX_MAX;
   20004           0 :                 return 1;
   20005             :         case 213:
   20006           0 :                 *AType = 0;
   20007           0 :                 *QType = 0;
   20008           0 :                 *b_min = FIX_MIN;
   20009           0 :                 *b_max = FIX_MAX;
   20010           0 :                 return 1;
   20011             :         case 214:
   20012           0 :                 *AType = 0;
   20013           0 :                 *QType = 0;
   20014           0 :                 *b_min = FIX_MIN;
   20015           0 :                 *b_max = FIX_MAX;
   20016           0 :                 return 1;
   20017             :         case 215:
   20018           0 :                 *AType = 0;
   20019           0 :                 *QType = 0;
   20020           0 :                 *b_min = FIX_MIN;
   20021           0 :                 *b_max = FIX_MAX;
   20022           0 :                 return 1;
   20023             :         case 216:
   20024           0 :                 *AType = 0;
   20025           0 :                 *QType = 0;
   20026           0 :                 *b_min = FIX_MIN;
   20027           0 :                 *b_max = FIX_MAX;
   20028           0 :                 return 1;
   20029             :         case 217:
   20030           0 :                 *AType = 0;
   20031           0 :                 *QType = 0;
   20032           0 :                 *b_min = FIX_MIN;
   20033           0 :                 *b_max = FIX_MAX;
   20034           0 :                 return 1;
   20035             :         case 218:
   20036           0 :                 *AType = 0;
   20037           0 :                 *QType = 0;
   20038           0 :                 *b_min = FIX_MIN;
   20039           0 :                 *b_max = FIX_MAX;
   20040           0 :                 return 1;
   20041             :         case 219:
   20042           0 :                 *AType = 0;
   20043           0 :                 *QType = 0;
   20044           0 :                 *b_min = FIX_MIN;
   20045           0 :                 *b_max = FIX_MAX;
   20046           0 :                 return 1;
   20047             :         case 220:
   20048           0 :                 *AType = 0;
   20049           0 :                 *QType = 0;
   20050           0 :                 *b_min = FIX_MIN;
   20051           0 :                 *b_max = FIX_MAX;
   20052           0 :                 return 1;
   20053             :         case 221:
   20054           0 :                 *AType = 0;
   20055           0 :                 *QType = 0;
   20056           0 :                 *b_min = FIX_MIN;
   20057           0 :                 *b_max = FIX_MAX;
   20058           0 :                 return 1;
   20059             :         case 222:
   20060           0 :                 *AType = 0;
   20061           0 :                 *QType = 0;
   20062           0 :                 *b_min = FIX_MIN;
   20063           0 :                 *b_max = FIX_MAX;
   20064           0 :                 return 1;
   20065             :         case 223:
   20066           0 :                 *AType = 0;
   20067           0 :                 *QType = 0;
   20068           0 :                 *b_min = FIX_MIN;
   20069           0 :                 *b_max = FIX_MAX;
   20070           0 :                 return 1;
   20071             :         case 224:
   20072           0 :                 *AType = 0;
   20073           0 :                 *QType = 0;
   20074           0 :                 *b_min = FIX_MIN;
   20075           0 :                 *b_max = FIX_MAX;
   20076           0 :                 return 1;
   20077             :         case 225:
   20078           0 :                 *AType = 0;
   20079           0 :                 *QType = 0;
   20080           0 :                 *b_min = FIX_MIN;
   20081           0 :                 *b_max = FIX_MAX;
   20082           0 :                 return 1;
   20083             :         case 226:
   20084           0 :                 *AType = 0;
   20085           0 :                 *QType = 0;
   20086           0 :                 *b_min = FIX_MIN;
   20087           0 :                 *b_max = FIX_MAX;
   20088           0 :                 return 1;
   20089             :         case 227:
   20090           0 :                 *AType = 0;
   20091           0 :                 *QType = 0;
   20092           0 :                 *b_min = FIX_MIN;
   20093           0 :                 *b_max = FIX_MAX;
   20094           0 :                 return 1;
   20095             :         case 228:
   20096           0 :                 *AType = 0;
   20097           0 :                 *QType = 0;
   20098           0 :                 *b_min = FIX_MIN;
   20099           0 :                 *b_max = FIX_MAX;
   20100           0 :                 return 1;
   20101             :         case 229:
   20102           0 :                 *AType = 0;
   20103           0 :                 *QType = 0;
   20104           0 :                 *b_min = FIX_MIN;
   20105           0 :                 *b_max = FIX_MAX;
   20106           0 :                 return 1;
   20107             :         case 230:
   20108           0 :                 *AType = 0;
   20109           0 :                 *QType = 0;
   20110           0 :                 *b_min = FIX_MIN;
   20111           0 :                 *b_max = FIX_MAX;
   20112           0 :                 return 1;
   20113             :         case 231:
   20114           0 :                 *AType = 0;
   20115           0 :                 *QType = 0;
   20116           0 :                 *b_min = FIX_MIN;
   20117           0 :                 *b_max = FIX_MAX;
   20118           0 :                 return 1;
   20119             :         case 232:
   20120           0 :                 *AType = 0;
   20121           0 :                 *QType = 0;
   20122           0 :                 *b_min = FIX_MIN;
   20123           0 :                 *b_max = FIX_MAX;
   20124           0 :                 return 1;
   20125             :         case 233:
   20126           0 :                 *AType = 0;
   20127           0 :                 *QType = 0;
   20128           0 :                 *b_min = FIX_MIN;
   20129           0 :                 *b_max = FIX_MAX;
   20130           0 :                 return 1;
   20131             :         case 234:
   20132           0 :                 *AType = 0;
   20133           0 :                 *QType = 0;
   20134           0 :                 *b_min = FIX_MIN;
   20135           0 :                 *b_max = FIX_MAX;
   20136           0 :                 return 1;
   20137             :         case 235:
   20138           0 :                 *AType = 0;
   20139           0 :                 *QType = 0;
   20140           0 :                 *b_min = FIX_MIN;
   20141           0 :                 *b_max = FIX_MAX;
   20142           0 :                 return 1;
   20143             :         case 236:
   20144           0 :                 *AType = 0;
   20145           0 :                 *QType = 0;
   20146           0 :                 *b_min = FIX_MIN;
   20147           0 :                 *b_max = FIX_MAX;
   20148           0 :                 return 1;
   20149             :         case 237:
   20150           0 :                 *AType = 0;
   20151           0 :                 *QType = 0;
   20152           0 :                 *b_min = FIX_MIN;
   20153           0 :                 *b_max = FIX_MAX;
   20154           0 :                 return 1;
   20155             :         case 238:
   20156           0 :                 *AType = 0;
   20157           0 :                 *QType = 0;
   20158           0 :                 *b_min = FIX_MIN;
   20159           0 :                 *b_max = FIX_MAX;
   20160           0 :                 return 1;
   20161             :         case 239:
   20162           0 :                 *AType = 0;
   20163           0 :                 *QType = 0;
   20164           0 :                 *b_min = FIX_MIN;
   20165           0 :                 *b_max = FIX_MAX;
   20166           0 :                 return 1;
   20167             :         case 240:
   20168           0 :                 *AType = 0;
   20169           0 :                 *QType = 0;
   20170           0 :                 *b_min = FIX_MIN;
   20171           0 :                 *b_max = FIX_MAX;
   20172           0 :                 return 1;
   20173             :         case 241:
   20174           0 :                 *AType = 0;
   20175           0 :                 *QType = 0;
   20176           0 :                 *b_min = FIX_MIN;
   20177           0 :                 *b_max = FIX_MAX;
   20178           0 :                 return 1;
   20179             :         case 242:
   20180           0 :                 *AType = 0;
   20181           0 :                 *QType = 0;
   20182           0 :                 *b_min = FIX_MIN;
   20183           0 :                 *b_max = FIX_MAX;
   20184           0 :                 return 1;
   20185             :         case 243:
   20186           0 :                 *AType = 0;
   20187           0 :                 *QType = 0;
   20188           0 :                 *b_min = FIX_MIN;
   20189           0 :                 *b_max = FIX_MAX;
   20190           0 :                 return 1;
   20191             :         case 244:
   20192           0 :                 *AType = 0;
   20193           0 :                 *QType = 0;
   20194           0 :                 *b_min = FIX_MIN;
   20195           0 :                 *b_max = FIX_MAX;
   20196           0 :                 return 1;
   20197             :         case 245:
   20198           0 :                 *AType = 0;
   20199           0 :                 *QType = 0;
   20200           0 :                 *b_min = FIX_MIN;
   20201           0 :                 *b_max = FIX_MAX;
   20202           0 :                 return 1;
   20203             :         case 246:
   20204           0 :                 *AType = 0;
   20205           0 :                 *QType = 0;
   20206           0 :                 *b_min = FIX_MIN;
   20207           0 :                 *b_max = FIX_MAX;
   20208           0 :                 return 1;
   20209             :         case 247:
   20210           0 :                 *AType = 0;
   20211           0 :                 *QType = 0;
   20212           0 :                 *b_min = FIX_MIN;
   20213           0 :                 *b_max = FIX_MAX;
   20214           0 :                 return 1;
   20215             :         case 248:
   20216           0 :                 *AType = 0;
   20217           0 :                 *QType = 0;
   20218           0 :                 *b_min = FIX_MIN;
   20219           0 :                 *b_max = FIX_MAX;
   20220           0 :                 return 1;
   20221             :         case 249:
   20222           0 :                 *AType = 0;
   20223           0 :                 *QType = 0;
   20224           0 :                 *b_min = FIX_MIN;
   20225           0 :                 *b_max = FIX_MAX;
   20226           0 :                 return 1;
   20227             :         case 250:
   20228           0 :                 *AType = 0;
   20229           0 :                 *QType = 0;
   20230           0 :                 *b_min = FIX_MIN;
   20231           0 :                 *b_max = FIX_MAX;
   20232           0 :                 return 1;
   20233             :         case 251:
   20234           0 :                 *AType = 0;
   20235           0 :                 *QType = 0;
   20236           0 :                 *b_min = FIX_MIN;
   20237           0 :                 *b_max = FIX_MAX;
   20238           0 :                 return 1;
   20239             :         case 252:
   20240           0 :                 *AType = 0;
   20241           0 :                 *QType = 0;
   20242           0 :                 *b_min = FIX_MIN;
   20243           0 :                 *b_max = FIX_MAX;
   20244           0 :                 return 1;
   20245             :         case 253:
   20246           0 :                 *AType = 0;
   20247           0 :                 *QType = 0;
   20248           0 :                 *b_min = FIX_MIN;
   20249           0 :                 *b_max = FIX_MAX;
   20250           0 :                 return 1;
   20251             :         case 254:
   20252           0 :                 *AType = 0;
   20253           0 :                 *QType = 0;
   20254           0 :                 *b_min = FIX_MIN;
   20255           0 :                 *b_max = FIX_MAX;
   20256           0 :                 return 1;
   20257             :         case 255:
   20258           0 :                 *AType = 0;
   20259           0 :                 *QType = 0;
   20260           0 :                 *b_min = FIX_MIN;
   20261           0 :                 *b_max = FIX_MAX;
   20262           0 :                 return 1;
   20263             :         case 256:
   20264           0 :                 *AType = 0;
   20265           0 :                 *QType = 0;
   20266           0 :                 *b_min = FIX_MIN;
   20267           0 :                 *b_max = FIX_MAX;
   20268           0 :                 return 1;
   20269             :         case 257:
   20270           0 :                 *AType = 0;
   20271           0 :                 *QType = 0;
   20272           0 :                 *b_min = FIX_MIN;
   20273           0 :                 *b_max = FIX_MAX;
   20274           0 :                 return 1;
   20275             :         case 258:
   20276           0 :                 *AType = 0;
   20277           0 :                 *QType = 0;
   20278           0 :                 *b_min = FIX_MIN;
   20279           0 :                 *b_max = FIX_MAX;
   20280           0 :                 return 1;
   20281             :         case 259:
   20282           0 :                 *AType = 0;
   20283           0 :                 *QType = 0;
   20284           0 :                 *b_min = FIX_MIN;
   20285           0 :                 *b_max = FIX_MAX;
   20286           0 :                 return 1;
   20287             :         case 260:
   20288           0 :                 *AType = 0;
   20289           0 :                 *QType = 0;
   20290           0 :                 *b_min = FIX_MIN;
   20291           0 :                 *b_max = FIX_MAX;
   20292           0 :                 return 1;
   20293             :         case 261:
   20294           0 :                 *AType = 0;
   20295           0 :                 *QType = 0;
   20296           0 :                 *b_min = FIX_MIN;
   20297           0 :                 *b_max = FIX_MAX;
   20298           0 :                 return 1;
   20299             :         case 262:
   20300           0 :                 *AType = 0;
   20301           0 :                 *QType = 0;
   20302           0 :                 *b_min = FIX_MIN;
   20303           0 :                 *b_max = FIX_MAX;
   20304           0 :                 return 1;
   20305             :         case 263:
   20306           0 :                 *AType = 0;
   20307           0 :                 *QType = 0;
   20308           0 :                 *b_min = FIX_MIN;
   20309           0 :                 *b_max = FIX_MAX;
   20310           0 :                 return 1;
   20311             :         case 264:
   20312           0 :                 *AType = 0;
   20313           0 :                 *QType = 0;
   20314           0 :                 *b_min = FIX_MIN;
   20315           0 :                 *b_max = FIX_MAX;
   20316           0 :                 return 1;
   20317             :         case 265:
   20318           0 :                 *AType = 0;
   20319           0 :                 *QType = 0;
   20320           0 :                 *b_min = FIX_MIN;
   20321           0 :                 *b_max = FIX_MAX;
   20322           0 :                 return 1;
   20323             :         case 266:
   20324           0 :                 *AType = 0;
   20325           0 :                 *QType = 0;
   20326           0 :                 *b_min = FIX_MIN;
   20327           0 :                 *b_max = FIX_MAX;
   20328           0 :                 return 1;
   20329             :         case 267:
   20330           0 :                 *AType = 0;
   20331           0 :                 *QType = 0;
   20332           0 :                 *b_min = FIX_MIN;
   20333           0 :                 *b_max = FIX_MAX;
   20334           0 :                 return 1;
   20335             :         case 268:
   20336           0 :                 *AType = 0;
   20337           0 :                 *QType = 0;
   20338           0 :                 *b_min = FIX_MIN;
   20339           0 :                 *b_max = FIX_MAX;
   20340           0 :                 return 1;
   20341             :         case 269:
   20342           0 :                 *AType = 0;
   20343           0 :                 *QType = 0;
   20344           0 :                 *b_min = FIX_MIN;
   20345           0 :                 *b_max = FIX_MAX;
   20346           0 :                 return 1;
   20347             :         case 270:
   20348           0 :                 *AType = 0;
   20349           0 :                 *QType = 0;
   20350           0 :                 *b_min = FIX_MIN;
   20351           0 :                 *b_max = FIX_MAX;
   20352           0 :                 return 1;
   20353             :         case 271:
   20354           0 :                 *AType = 0;
   20355           0 :                 *QType = 0;
   20356           0 :                 *b_min = FIX_MIN;
   20357           0 :                 *b_max = FIX_MAX;
   20358           0 :                 return 1;
   20359             :         case 272:
   20360           0 :                 *AType = 0;
   20361           0 :                 *QType = 0;
   20362           0 :                 *b_min = FIX_MIN;
   20363           0 :                 *b_max = FIX_MAX;
   20364           0 :                 return 1;
   20365             :         case 273:
   20366           0 :                 *AType = 0;
   20367           0 :                 *QType = 0;
   20368           0 :                 *b_min = FIX_MIN;
   20369           0 :                 *b_max = FIX_MAX;
   20370           0 :                 return 1;
   20371             :         case 274:
   20372           0 :                 *AType = 0;
   20373           0 :                 *QType = 0;
   20374           0 :                 *b_min = FIX_MIN;
   20375           0 :                 *b_max = FIX_MAX;
   20376           0 :                 return 1;
   20377             :         case 275:
   20378           0 :                 *AType = 0;
   20379           0 :                 *QType = 0;
   20380           0 :                 *b_min = FIX_MIN;
   20381           0 :                 *b_max = FIX_MAX;
   20382           0 :                 return 1;
   20383             :         case 276:
   20384           0 :                 *AType = 0;
   20385           0 :                 *QType = 0;
   20386           0 :                 *b_min = FIX_MIN;
   20387           0 :                 *b_max = FIX_MAX;
   20388           0 :                 return 1;
   20389             :         case 277:
   20390           0 :                 *AType = 0;
   20391           0 :                 *QType = 0;
   20392           0 :                 *b_min = FIX_MIN;
   20393           0 :                 *b_max = FIX_MAX;
   20394           0 :                 return 1;
   20395             :         case 278:
   20396           0 :                 *AType = 0;
   20397           0 :                 *QType = 0;
   20398           0 :                 *b_min = FIX_MIN;
   20399           0 :                 *b_max = FIX_MAX;
   20400           0 :                 return 1;
   20401             :         case 279:
   20402           0 :                 *AType = 0;
   20403           0 :                 *QType = 0;
   20404           0 :                 *b_min = FIX_MIN;
   20405           0 :                 *b_max = FIX_MAX;
   20406           0 :                 return 1;
   20407             :         case 280:
   20408           0 :                 *AType = 0;
   20409           0 :                 *QType = 0;
   20410           0 :                 *b_min = FIX_MIN;
   20411           0 :                 *b_max = FIX_MAX;
   20412           0 :                 return 1;
   20413             :         case 281:
   20414           0 :                 *AType = 0;
   20415           0 :                 *QType = 0;
   20416           0 :                 *b_min = FIX_MIN;
   20417           0 :                 *b_max = FIX_MAX;
   20418           0 :                 return 1;
   20419             :         case 282:
   20420           0 :                 *AType = 0;
   20421           0 :                 *QType = 0;
   20422           0 :                 *b_min = FIX_MIN;
   20423           0 :                 *b_max = FIX_MAX;
   20424           0 :                 return 1;
   20425             :         case 283:
   20426           0 :                 *AType = 0;
   20427           0 :                 *QType = 0;
   20428           0 :                 *b_min = FIX_MIN;
   20429           0 :                 *b_max = FIX_MAX;
   20430           0 :                 return 1;
   20431             :         case 284:
   20432           0 :                 *AType = 0;
   20433           0 :                 *QType = 0;
   20434           0 :                 *b_min = FIX_MIN;
   20435           0 :                 *b_max = FIX_MAX;
   20436           0 :                 return 1;
   20437             :         case 285:
   20438           0 :                 *AType = 0;
   20439           0 :                 *QType = 0;
   20440           0 :                 *b_min = FIX_MIN;
   20441           0 :                 *b_max = FIX_MAX;
   20442           0 :                 return 1;
   20443             :         case 286:
   20444           0 :                 *AType = 0;
   20445           0 :                 *QType = 0;
   20446           0 :                 *b_min = FIX_MIN;
   20447           0 :                 *b_max = FIX_MAX;
   20448           0 :                 return 1;
   20449             :         case 287:
   20450           0 :                 *AType = 0;
   20451           0 :                 *QType = 0;
   20452           0 :                 *b_min = FIX_MIN;
   20453           0 :                 *b_max = FIX_MAX;
   20454           0 :                 return 1;
   20455             :         case 288:
   20456           0 :                 *AType = 0;
   20457           0 :                 *QType = 0;
   20458           0 :                 *b_min = FIX_MIN;
   20459           0 :                 *b_max = FIX_MAX;
   20460           0 :                 return 1;
   20461             :         case 289:
   20462           0 :                 *AType = 0;
   20463           0 :                 *QType = 0;
   20464           0 :                 *b_min = FIX_MIN;
   20465           0 :                 *b_max = FIX_MAX;
   20466           0 :                 return 1;
   20467             :         case 290:
   20468           0 :                 *AType = 0;
   20469           0 :                 *QType = 0;
   20470           0 :                 *b_min = FIX_MIN;
   20471           0 :                 *b_max = FIX_MAX;
   20472           0 :                 return 1;
   20473             :         case 291:
   20474           0 :                 *AType = 0;
   20475           0 :                 *QType = 0;
   20476           0 :                 *b_min = FIX_MIN;
   20477           0 :                 *b_max = FIX_MAX;
   20478           0 :                 return 1;
   20479             :         case 292:
   20480           0 :                 *AType = 0;
   20481           0 :                 *QType = 0;
   20482           0 :                 *b_min = FIX_MIN;
   20483           0 :                 *b_max = FIX_MAX;
   20484           0 :                 return 1;
   20485             :         case 293:
   20486           0 :                 *AType = 0;
   20487           0 :                 *QType = 0;
   20488           0 :                 *b_min = FIX_MIN;
   20489           0 :                 *b_max = FIX_MAX;
   20490           0 :                 return 1;
   20491             :         case 294:
   20492           0 :                 *AType = 0;
   20493           0 :                 *QType = 0;
   20494           0 :                 *b_min = FIX_MIN;
   20495           0 :                 *b_max = FIX_MAX;
   20496           0 :                 return 1;
   20497             :         case 295:
   20498           0 :                 *AType = 0;
   20499           0 :                 *QType = 0;
   20500           0 :                 *b_min = FIX_MIN;
   20501           0 :                 *b_max = FIX_MAX;
   20502           0 :                 return 1;
   20503             :         default:
   20504           0 :                 return 0;
   20505             :         }
   20506           0 : }
   20507             : 
   20508             : 
   20509             : 
   20510             : GF_Node *BAP_Create()
   20511             : {
   20512             :         M_BAP *p;
   20513           0 :         GF_SAFEALLOC(p, M_BAP);
   20514           0 :         if(!p) return NULL;
   20515           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BAP);
   20516             : 
   20517             :         /*default field values*/
   20518           0 :         p->sacroiliac_tilt = 1 << 31;
   20519           0 :         p->sacroiliac_torsion = 1 << 31;
   20520           0 :         p->sacroiliac_roll = 1 << 31;
   20521           0 :         p->l_hip_flexion = 1 << 31;
   20522           0 :         p->r_hip_flexion = 1 << 31;
   20523           0 :         p->l_hip_abduct = 1 << 31;
   20524           0 :         p->r_hip_abduct = 1 << 31;
   20525           0 :         p->l_hip_twisting = 1 << 31;
   20526           0 :         p->r_hip_twisting = 1 << 31;
   20527           0 :         p->l_knee_flexion = 1 << 31;
   20528           0 :         p->r_knee_flexion = 1 << 31;
   20529           0 :         p->l_knee_twisting = 1 << 31;
   20530           0 :         p->r_knee_twisting = 1 << 31;
   20531           0 :         p->l_ankle_flexion = 1 << 31;
   20532           0 :         p->r_ankle_flexion = 1 << 31;
   20533           0 :         p->l_ankle_twisting = 1 << 31;
   20534           0 :         p->r_ankle_twisting = 1 << 31;
   20535           0 :         p->l_subtalar_flexion = 1 << 31;
   20536           0 :         p->r_subtalar_flexion = 1 << 31;
   20537           0 :         p->l_midtarsal_flexion = 1 << 31;
   20538           0 :         p->r_midtarsal_flexion = 1 << 31;
   20539           0 :         p->l_metatarsal_flexion = 1 << 31;
   20540           0 :         p->r_metatarsal_flexion = 1 << 31;
   20541           0 :         p->l_sternoclavicular_abduct = 1 << 31;
   20542           0 :         p->r_sternoclavicular_abduct = 1 << 31;
   20543           0 :         p->l_sternoclavicular_rotate = 1 << 31;
   20544           0 :         p->r_sternoclavicular_rotate = 1 << 31;
   20545           0 :         p->l_acromioclavicular_abduct = 1 << 31;
   20546           0 :         p->r_acromioclavicular_abduct = 1 << 31;
   20547           0 :         p->l_acromioclavicular_rotate = 1 << 31;
   20548           0 :         p->r_acromioclavicular_rotate = 1 << 31;
   20549           0 :         p->l_shoulder_flexion = 1 << 31;
   20550           0 :         p->r_shoulder_flexion = 1 << 31;
   20551           0 :         p->l_shoulder_abduct = 1 << 31;
   20552           0 :         p->r_shoulder_abduct = 1 << 31;
   20553           0 :         p->l_shoulder_twisting = 1 << 31;
   20554           0 :         p->r_shoulder_twisting = 1 << 31;
   20555           0 :         p->l_elbow_flexion = 1 << 31;
   20556           0 :         p->r_elbow_flexion = 1 << 31;
   20557           0 :         p->l_elbow_twisting = 1 << 31;
   20558           0 :         p->r_elbow_twisting = 1 << 31;
   20559           0 :         p->l_wrist_flexion = 1 << 31;
   20560           0 :         p->r_wrist_flexion = 1 << 31;
   20561           0 :         p->l_wrist_pivot = 1 << 31;
   20562           0 :         p->r_wrist_pivot = 1 << 31;
   20563           0 :         p->l_wrist_twisting = 1 << 31;
   20564           0 :         p->r_wrist_twisting = 1 << 31;
   20565           0 :         p->skullbase_roll = 1 << 31;
   20566           0 :         p->skullbase_torsion = 1 << 31;
   20567           0 :         p->skullbase_tilt = 1 << 31;
   20568           0 :         p->vc1roll = 1 << 31;
   20569           0 :         p->vc1torsion = 1 << 31;
   20570           0 :         p->vc1tilt = 1 << 31;
   20571           0 :         p->vc2roll = 1 << 31;
   20572           0 :         p->vc2torsion = 1 << 31;
   20573           0 :         p->vc2tilt = 1 << 31;
   20574           0 :         p->vc3roll = 1 << 31;
   20575           0 :         p->vc3torsion = 1 << 31;
   20576           0 :         p->vc3tilt = 1 << 31;
   20577           0 :         p->vc4roll = 1 << 31;
   20578           0 :         p->vc4torsion = 1 << 31;
   20579           0 :         p->vc4tilt = 1 << 31;
   20580           0 :         p->vc5roll = 1 << 31;
   20581           0 :         p->vc5torsion = 1 << 31;
   20582           0 :         p->vc5tilt = 1 << 31;
   20583           0 :         p->vc6roll = 1 << 31;
   20584           0 :         p->vc6torsion = 1 << 31;
   20585           0 :         p->vc6tilt = 1 << 31;
   20586           0 :         p->vc7roll = 1 << 31;
   20587           0 :         p->vc7torsion = 1 << 31;
   20588           0 :         p->vc7tilt = 1 << 31;
   20589           0 :         p->vt1roll = 1 << 31;
   20590           0 :         p->vt1torsion = 1 << 31;
   20591           0 :         p->vt1tilt = 1 << 31;
   20592           0 :         p->vt2roll = 1 << 31;
   20593           0 :         p->vt2torsion = 1 << 31;
   20594           0 :         p->vt2tilt = 1 << 31;
   20595           0 :         p->vt3roll = 1 << 31;
   20596           0 :         p->vt3torsion = 1 << 31;
   20597           0 :         p->vt3tilt = 1 << 31;
   20598           0 :         p->vt4roll = 1 << 31;
   20599           0 :         p->vt4torsion = 1 << 31;
   20600           0 :         p->vt4tilt = 1 << 31;
   20601           0 :         p->vt5roll = 1 << 31;
   20602           0 :         p->vt5torsion = 1 << 31;
   20603           0 :         p->vt5tilt = 1 << 31;
   20604           0 :         p->vt6roll = 1 << 31;
   20605           0 :         p->vt6torsion = 1 << 31;
   20606           0 :         p->vt6tilt = 1 << 31;
   20607           0 :         p->vt7roll = 1 << 31;
   20608           0 :         p->vt7torsion = 1 << 31;
   20609           0 :         p->vt7tilt = 1 << 31;
   20610           0 :         p->vt8roll = 1 << 31;
   20611           0 :         p->vt8torsion = 1 << 31;
   20612           0 :         p->vt8tilt = 1 << 31;
   20613           0 :         p->vt9roll = 1 << 31;
   20614           0 :         p->vt9torsion = 1 << 31;
   20615           0 :         p->vt9tilt = 1 << 31;
   20616           0 :         p->vt10roll = 1 << 31;
   20617           0 :         p->vt10torsion = 1 << 31;
   20618           0 :         p->vt10tilt = 1 << 31;
   20619           0 :         p->vt11roll = 1 << 31;
   20620           0 :         p->vt11torsion = 1 << 31;
   20621           0 :         p->vt11tilt = 1 << 31;
   20622           0 :         p->vt12roll = 1 << 31;
   20623           0 :         p->vt12torsion = 1 << 31;
   20624           0 :         p->vt12tilt = 1 << 31;
   20625           0 :         p->vl1roll = 1 << 31;
   20626           0 :         p->vl1torsion = 1 << 31;
   20627           0 :         p->vl1tilt = 1 << 31;
   20628           0 :         p->vl2roll = 1 << 31;
   20629           0 :         p->vl2torsion = 1 << 31;
   20630           0 :         p->vl2tilt = 1 << 31;
   20631           0 :         p->vl3roll = 1 << 31;
   20632           0 :         p->vl3torsion = 1 << 31;
   20633           0 :         p->vl3tilt = 1 << 31;
   20634           0 :         p->vl4roll = 1 << 31;
   20635           0 :         p->vl4torsion = 1 << 31;
   20636           0 :         p->vl4tilt = 1 << 31;
   20637           0 :         p->vl5roll = 1 << 31;
   20638           0 :         p->vl5torsion = 1 << 31;
   20639           0 :         p->vl5tilt = 1 << 31;
   20640           0 :         p->l_pinky0_flexion = 1 << 31;
   20641           0 :         p->r_pinky0_flexion = 1 << 31;
   20642           0 :         p->l_pinky1_flexion = 1 << 31;
   20643           0 :         p->r_pinky1_flexion = 1 << 31;
   20644           0 :         p->l_pinky1_pivot = 1 << 31;
   20645           0 :         p->r_pinky1_pivot = 1 << 31;
   20646           0 :         p->l_pinky1_twisting = 1 << 31;
   20647           0 :         p->r_pinky1_twisting = 1 << 31;
   20648           0 :         p->l_pinky2_flexion = 1 << 31;
   20649           0 :         p->r_pinky2_flexion = 1 << 31;
   20650           0 :         p->l_pinky3_flexion = 1 << 31;
   20651           0 :         p->r_pinky3_flexion = 1 << 31;
   20652           0 :         p->l_ring0_flexion = 1 << 31;
   20653           0 :         p->r_ring0_flexion = 1 << 31;
   20654           0 :         p->l_ring1_flexion = 1 << 31;
   20655           0 :         p->r_ring1_flexion = 1 << 31;
   20656           0 :         p->l_ring1_pivot = 1 << 31;
   20657           0 :         p->r_ring1_pivot = 1 << 31;
   20658           0 :         p->l_ring1_twisting = 1 << 31;
   20659           0 :         p->r_ring1_twisting = 1 << 31;
   20660           0 :         p->l_ring2_flexion = 1 << 31;
   20661           0 :         p->r_ring2_flexion = 1 << 31;
   20662           0 :         p->l_ring3_flexion = 1 << 31;
   20663           0 :         p->r_ring3_flexion = 1 << 31;
   20664           0 :         p->l_middle0_flexion = 1 << 31;
   20665           0 :         p->r_middle0_flexion = 1 << 31;
   20666           0 :         p->l_middle1_flexion = 1 << 31;
   20667           0 :         p->r_middle1_flexion = 1 << 31;
   20668           0 :         p->l_middle1_pivot = 1 << 31;
   20669           0 :         p->r_middle1_pivot = 1 << 31;
   20670           0 :         p->l_middle1_twisting = 1 << 31;
   20671           0 :         p->r_middle1_twisting = 1 << 31;
   20672           0 :         p->l_middle2_flexion = 1 << 31;
   20673           0 :         p->r_middle2_flexion = 1 << 31;
   20674           0 :         p->l_middle3_flexion = 1 << 31;
   20675           0 :         p->r_middle3_flexion = 1 << 31;
   20676           0 :         p->l_index0_flexion = 1 << 31;
   20677           0 :         p->r_index0_flexion = 1 << 31;
   20678           0 :         p->l_index1_flexion = 1 << 31;
   20679           0 :         p->r_index1_flexion = 1 << 31;
   20680           0 :         p->l_index1_pivot = 1 << 31;
   20681           0 :         p->r_index1_pivot = 1 << 31;
   20682           0 :         p->l_index1_twisting = 1 << 31;
   20683           0 :         p->r_index1_twisting = 1 << 31;
   20684           0 :         p->l_index2_flexion = 1 << 31;
   20685           0 :         p->r_index2_flexion = 1 << 31;
   20686           0 :         p->l_index3_flexion = 1 << 31;
   20687           0 :         p->r_index3_flexion = 1 << 31;
   20688           0 :         p->l_thumb1_flexion = 1 << 31;
   20689           0 :         p->r_thumb1_flexion = 1 << 31;
   20690           0 :         p->l_thumb1_pivot = 1 << 31;
   20691           0 :         p->r_thumb1_pivot = 1 << 31;
   20692           0 :         p->l_thumb1_twisting = 1 << 31;
   20693           0 :         p->r_thumb1_twisting = 1 << 31;
   20694           0 :         p->l_thumb2_flexion = 1 << 31;
   20695           0 :         p->r_thumb2_flexion = 1 << 31;
   20696           0 :         p->l_thumb3_flexion = 1 << 31;
   20697           0 :         p->r_thumb3_flexion = 1 << 31;
   20698           0 :         p->HumanoidRoot_tr_vertical = 1 << 31;
   20699           0 :         p->HumanoidRoot_tr_lateral = 1 << 31;
   20700           0 :         p->HumanoidRoot_tr_frontal = 1 << 31;
   20701           0 :         p->HumanoidRoot_rt_body_turn = 1 << 31;
   20702           0 :         p->HumanoidRoot_rt_body_roll = 1 << 31;
   20703           0 :         p->HumanoidRoot_rt_body_tilt = 1 << 31;
   20704           0 :         p->extensionBap187 = 1 << 31;
   20705           0 :         p->extensionBap188 = 1 << 31;
   20706           0 :         p->extensionBap189 = 1 << 31;
   20707           0 :         p->extensionBap190 = 1 << 31;
   20708           0 :         p->extensionBap191 = 1 << 31;
   20709           0 :         p->extensionBap192 = 1 << 31;
   20710           0 :         p->extensionBap193 = 1 << 31;
   20711           0 :         p->extensionBap194 = 1 << 31;
   20712           0 :         p->extensionBap195 = 1 << 31;
   20713           0 :         p->extensionBap196 = 1 << 31;
   20714           0 :         p->extensionBap197 = 1 << 31;
   20715           0 :         p->extensionBap198 = 1 << 31;
   20716           0 :         p->extensionBap199 = 1 << 31;
   20717           0 :         p->extensionBap200 = 1 << 31;
   20718           0 :         p->extensionBap201 = 1 << 31;
   20719           0 :         p->extensionBap202 = 1 << 31;
   20720           0 :         p->extensionBap203 = 1 << 31;
   20721           0 :         p->extensionBap204 = 1 << 31;
   20722           0 :         p->extensionBap205 = 1 << 31;
   20723           0 :         p->extensionBap206 = 1 << 31;
   20724           0 :         p->extensionBap207 = 1 << 31;
   20725           0 :         p->extensionBap208 = 1 << 31;
   20726           0 :         p->extensionBap209 = 1 << 31;
   20727           0 :         p->extensionBap210 = 1 << 31;
   20728           0 :         p->extensionBap211 = 1 << 31;
   20729           0 :         p->extensionBap212 = 1 << 31;
   20730           0 :         p->extensionBap213 = 1 << 31;
   20731           0 :         p->extensionBap214 = 1 << 31;
   20732           0 :         p->extensionBap215 = 1 << 31;
   20733           0 :         p->extensionBap216 = 1 << 31;
   20734           0 :         p->extensionBap217 = 1 << 31;
   20735           0 :         p->extensionBap218 = 1 << 31;
   20736           0 :         p->extensionBap219 = 1 << 31;
   20737           0 :         p->extensionBap220 = 1 << 31;
   20738           0 :         p->extensionBap221 = 1 << 31;
   20739           0 :         p->extensionBap222 = 1 << 31;
   20740           0 :         p->extensionBap223 = 1 << 31;
   20741           0 :         p->extensionBap224 = 1 << 31;
   20742           0 :         p->extensionBap225 = 1 << 31;
   20743           0 :         p->extensionBap226 = 1 << 31;
   20744           0 :         p->extensionBap227 = 1 << 31;
   20745           0 :         p->extensionBap228 = 1 << 31;
   20746           0 :         p->extensionBap229 = 1 << 31;
   20747           0 :         p->extensionBap230 = 1 << 31;
   20748           0 :         p->extensionBap231 = 1 << 31;
   20749           0 :         p->extensionBap232 = 1 << 31;
   20750           0 :         p->extensionBap233 = 1 << 31;
   20751           0 :         p->extensionBap234 = 1 << 31;
   20752           0 :         p->extensionBap235 = 1 << 31;
   20753           0 :         p->extensionBap236 = 1 << 31;
   20754           0 :         p->extensionBap237 = 1 << 31;
   20755           0 :         p->extensionBap238 = 1 << 31;
   20756           0 :         p->extensionBap239 = 1 << 31;
   20757           0 :         p->extensionBap240 = 1 << 31;
   20758           0 :         p->extensionBap241 = 1 << 31;
   20759           0 :         p->extensionBap242 = 1 << 31;
   20760           0 :         p->extensionBap243 = 1 << 31;
   20761           0 :         p->extensionBap244 = 1 << 31;
   20762           0 :         p->extensionBap245 = 1 << 31;
   20763           0 :         p->extensionBap246 = 1 << 31;
   20764           0 :         p->extensionBap247 = 1 << 31;
   20765           0 :         p->extensionBap248 = 1 << 31;
   20766           0 :         p->extensionBap249 = 1 << 31;
   20767           0 :         p->extensionBap250 = 1 << 31;
   20768           0 :         p->extensionBap251 = 1 << 31;
   20769           0 :         p->extensionBap252 = 1 << 31;
   20770           0 :         p->extensionBap253 = 1 << 31;
   20771           0 :         p->extensionBap254 = 1 << 31;
   20772           0 :         p->extensionBap255 = 1 << 31;
   20773           0 :         p->extensionBap256 = 1 << 31;
   20774           0 :         p->extensionBap257 = 1 << 31;
   20775           0 :         p->extensionBap258 = 1 << 31;
   20776           0 :         p->extensionBap259 = 1 << 31;
   20777           0 :         p->extensionBap260 = 1 << 31;
   20778           0 :         p->extensionBap261 = 1 << 31;
   20779           0 :         p->extensionBap262 = 1 << 31;
   20780           0 :         p->extensionBap263 = 1 << 31;
   20781           0 :         p->extensionBap264 = 1 << 31;
   20782           0 :         p->extensionBap265 = 1 << 31;
   20783           0 :         p->extensionBap266 = 1 << 31;
   20784           0 :         p->extensionBap267 = 1 << 31;
   20785           0 :         p->extensionBap268 = 1 << 31;
   20786           0 :         p->extensionBap269 = 1 << 31;
   20787           0 :         p->extensionBap270 = 1 << 31;
   20788           0 :         p->extensionBap271 = 1 << 31;
   20789           0 :         p->extensionBap272 = 1 << 31;
   20790           0 :         p->extensionBap273 = 1 << 31;
   20791           0 :         p->extensionBap274 = 1 << 31;
   20792           0 :         p->extensionBap275 = 1 << 31;
   20793           0 :         p->extensionBap276 = 1 << 31;
   20794           0 :         p->extensionBap277 = 1 << 31;
   20795           0 :         p->extensionBap278 = 1 << 31;
   20796           0 :         p->extensionBap279 = 1 << 31;
   20797           0 :         p->extensionBap280 = 1 << 31;
   20798           0 :         p->extensionBap281 = 1 << 31;
   20799           0 :         p->extensionBap282 = 1 << 31;
   20800           0 :         p->extensionBap283 = 1 << 31;
   20801           0 :         p->extensionBap284 = 1 << 31;
   20802           0 :         p->extensionBap285 = 1 << 31;
   20803           0 :         p->extensionBap286 = 1 << 31;
   20804           0 :         p->extensionBap287 = 1 << 31;
   20805           0 :         p->extensionBap288 = 1 << 31;
   20806           0 :         p->extensionBap289 = 1 << 31;
   20807           0 :         p->extensionBap290 = 1 << 31;
   20808           0 :         p->extensionBap291 = 1 << 31;
   20809           0 :         p->extensionBap292 = 1 << 31;
   20810           0 :         p->extensionBap293 = 1 << 31;
   20811           0 :         p->extensionBap294 = 1 << 31;
   20812           0 :         p->extensionBap295 = 1 << 31;
   20813           0 :         p->extensionBap296 = 1 << 31;
   20814           0 :         return (GF_Node *)p;
   20815           0 : }
   20816             : 
   20817             : 
   20818             : /*
   20819             :         BDP Node deletion
   20820             : */
   20821             : 
   20822             : static void BDP_Del(GF_Node *node)
   20823             : {
   20824           0 :         M_BDP *p = (M_BDP *) node;
   20825           0 :         gf_node_unregister_children((GF_Node *) p, p->bodyDefTables);
   20826           0 :         gf_node_unregister_children((GF_Node *) p, p->bodySceneGraph);
   20827           0 :         gf_node_free((GF_Node *) p);
   20828           0 : }
   20829             : 
   20830             : static const u16 BDP_Def2All[] = { 0, 1};
   20831             : static const u16 BDP_In2All[] = { 0, 1};
   20832             : static const u16 BDP_Out2All[] = { 0, 1};
   20833             : 
   20834             : static u32 BDP_get_field_count(GF_Node *node, u8 IndexMode)
   20835             : {
   20836           0 :         switch(IndexMode) {
   20837             :         case GF_SG_FIELD_CODING_IN:
   20838           0 :                 return 2;
   20839             :         case GF_SG_FIELD_CODING_DEF:
   20840           0 :                 return 2;
   20841             :         case GF_SG_FIELD_CODING_OUT:
   20842           0 :                 return 2;
   20843             :         case GF_SG_FIELD_CODING_DYN:
   20844           0 :                 return 0;
   20845             :         default:
   20846           0 :                 return 2;
   20847             :         }
   20848           0 : }
   20849             : 
   20850             : static GF_Err BDP_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   20851             : {
   20852           0 :         switch(IndexMode) {
   20853             :         case GF_SG_FIELD_CODING_IN:
   20854           0 :                 *allField = BDP_In2All[inField];
   20855           0 :                 return GF_OK;
   20856             :         case GF_SG_FIELD_CODING_DEF:
   20857           0 :                 *allField = BDP_Def2All[inField];
   20858           0 :                 return GF_OK;
   20859             :         case GF_SG_FIELD_CODING_OUT:
   20860           0 :                 *allField = BDP_Out2All[inField];
   20861           0 :                 return GF_OK;
   20862             :         default:
   20863           0 :                 return GF_BAD_PARAM;
   20864             :         }
   20865           0 : }
   20866             : static GF_Err BDP_get_field(GF_Node *node, GF_FieldInfo *info)
   20867             : {
   20868           0 :         switch (info->fieldIndex) {
   20869             :         case 0:
   20870           0 :                 info->name = "bodyDefTables";
   20871           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20872           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   20873           0 :                 info->NDTtype = NDT_SFBodyDefTableNode;
   20874           0 :                 info->far_ptr = & ((M_BDP *)node)->bodyDefTables;
   20875           0 :                 return GF_OK;
   20876             :         case 1:
   20877           0 :                 info->name = "bodySceneGraph";
   20878           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20879           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   20880           0 :                 info->NDTtype = NDT_SF3DNode;
   20881           0 :                 info->far_ptr = & ((M_BDP *)node)->bodySceneGraph;
   20882           0 :                 return GF_OK;
   20883             :         default:
   20884           0 :                 return GF_BAD_PARAM;
   20885             :         }
   20886           0 : }
   20887             : 
   20888             : 
   20889             : static s32 BDP_get_field_index_by_name(char *name)
   20890             : {
   20891           0 :         if (!strcmp("bodyDefTables", name)) return 0;
   20892           0 :         if (!strcmp("bodySceneGraph", name)) return 1;
   20893           0 :         return -1;
   20894           0 : }
   20895             : static Bool BDP_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   20896             : {
   20897             :         switch (FieldIndex) {
   20898             :         default:
   20899           0 :                 return 0;
   20900             :         }
   20901             : }
   20902             : 
   20903             : 
   20904             : 
   20905             : GF_Node *BDP_Create()
   20906             : {
   20907             :         M_BDP *p;
   20908           0 :         GF_SAFEALLOC(p, M_BDP);
   20909           0 :         if(!p) return NULL;
   20910           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BDP);
   20911             : 
   20912             :         /*default field values*/
   20913           0 :         return (GF_Node *)p;
   20914           0 : }
   20915             : 
   20916             : 
   20917             : /*
   20918             :         Body Node deletion
   20919             : */
   20920             : 
   20921             : static void Body_Del(GF_Node *node)
   20922             : {
   20923           0 :         M_Body *p = (M_Body *) node;
   20924           0 :         gf_node_unregister((GF_Node *) p->bdp, (GF_Node *) p);
   20925           0 :         gf_node_unregister((GF_Node *) p->bap, (GF_Node *) p);
   20926           0 :         gf_node_unregister_children((GF_Node *) p, p->renderedBody);
   20927           0 :         gf_node_free((GF_Node *) p);
   20928           0 : }
   20929             : 
   20930             : static const u16 Body_Def2All[] = { 0, 1, 2};
   20931             : static const u16 Body_In2All[] = { 0, 1, 2};
   20932             : static const u16 Body_Out2All[] = { 0, 1, 2};
   20933             : 
   20934             : static u32 Body_get_field_count(GF_Node *node, u8 IndexMode)
   20935             : {
   20936           0 :         switch(IndexMode) {
   20937             :         case GF_SG_FIELD_CODING_IN:
   20938           0 :                 return 3;
   20939             :         case GF_SG_FIELD_CODING_DEF:
   20940           0 :                 return 3;
   20941             :         case GF_SG_FIELD_CODING_OUT:
   20942           0 :                 return 3;
   20943             :         case GF_SG_FIELD_CODING_DYN:
   20944           0 :                 return 0;
   20945             :         default:
   20946           0 :                 return 3;
   20947             :         }
   20948           0 : }
   20949             : 
   20950             : static GF_Err Body_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   20951             : {
   20952           0 :         switch(IndexMode) {
   20953             :         case GF_SG_FIELD_CODING_IN:
   20954           0 :                 *allField = Body_In2All[inField];
   20955           0 :                 return GF_OK;
   20956             :         case GF_SG_FIELD_CODING_DEF:
   20957           0 :                 *allField = Body_Def2All[inField];
   20958           0 :                 return GF_OK;
   20959             :         case GF_SG_FIELD_CODING_OUT:
   20960           0 :                 *allField = Body_Out2All[inField];
   20961           0 :                 return GF_OK;
   20962             :         default:
   20963           0 :                 return GF_BAD_PARAM;
   20964             :         }
   20965           0 : }
   20966             : static GF_Err Body_get_field(GF_Node *node, GF_FieldInfo *info)
   20967             : {
   20968           0 :         switch (info->fieldIndex) {
   20969             :         case 0:
   20970           0 :                 info->name = "bdp";
   20971           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20972           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   20973           0 :                 info->NDTtype = NDT_SFBDPNode;
   20974           0 :                 info->far_ptr = & ((M_Body *)node)->bdp;
   20975           0 :                 return GF_OK;
   20976             :         case 1:
   20977           0 :                 info->name = "bap";
   20978           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20979           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   20980           0 :                 info->NDTtype = NDT_SFBAPNode;
   20981           0 :                 info->far_ptr = & ((M_Body *)node)->bap;
   20982           0 :                 return GF_OK;
   20983             :         case 2:
   20984           0 :                 info->name = "renderedBody";
   20985           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20986           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   20987           0 :                 info->NDTtype = NDT_SF3DNode;
   20988           0 :                 info->far_ptr = & ((M_Body *)node)->renderedBody;
   20989           0 :                 return GF_OK;
   20990             :         default:
   20991           0 :                 return GF_BAD_PARAM;
   20992             :         }
   20993           0 : }
   20994             : 
   20995             : 
   20996             : static s32 Body_get_field_index_by_name(char *name)
   20997             : {
   20998           0 :         if (!strcmp("bdp", name)) return 0;
   20999           0 :         if (!strcmp("bap", name)) return 1;
   21000           0 :         if (!strcmp("renderedBody", name)) return 2;
   21001           0 :         return -1;
   21002           0 : }
   21003             : static Bool Body_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21004             : {
   21005             :         switch (FieldIndex) {
   21006             :         default:
   21007           0 :                 return 0;
   21008             :         }
   21009             : }
   21010             : 
   21011             : 
   21012             : 
   21013             : GF_Node *Body_Create()
   21014             : {
   21015             :         M_Body *p;
   21016           0 :         GF_SAFEALLOC(p, M_Body);
   21017           0 :         if(!p) return NULL;
   21018           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Body);
   21019             : 
   21020             :         /*default field values*/
   21021           0 :         return (GF_Node *)p;
   21022           0 : }
   21023             : 
   21024             : 
   21025             : /*
   21026             :         BodyDefTable Node deletion
   21027             : */
   21028             : 
   21029             : static void BodyDefTable_Del(GF_Node *node)
   21030             : {
   21031           0 :         M_BodyDefTable *p = (M_BodyDefTable *) node;
   21032           0 :         gf_sg_sfstring_del(p->bodySceneGraphNodeName);
   21033           0 :         gf_sg_mfint32_del(p->bapIDs);
   21034           0 :         gf_sg_mfint32_del(p->vertexIds);
   21035           0 :         gf_sg_mfint32_del(p->bapCombinations);
   21036           0 :         gf_sg_mfvec3f_del(p->displacements);
   21037           0 :         gf_node_free((GF_Node *) p);
   21038           0 : }
   21039             : 
   21040             : static const u16 BodyDefTable_Def2All[] = { 0, 1, 2, 3, 4, 5};
   21041             : static const u16 BodyDefTable_In2All[] = { 0, 1, 2, 3, 4, 5};
   21042             : static const u16 BodyDefTable_Out2All[] = { 0, 1, 2, 3, 4, 5};
   21043             : 
   21044             : static u32 BodyDefTable_get_field_count(GF_Node *node, u8 IndexMode)
   21045             : {
   21046           0 :         switch(IndexMode) {
   21047             :         case GF_SG_FIELD_CODING_IN:
   21048           0 :                 return 6;
   21049             :         case GF_SG_FIELD_CODING_DEF:
   21050           0 :                 return 6;
   21051             :         case GF_SG_FIELD_CODING_OUT:
   21052           0 :                 return 6;
   21053             :         case GF_SG_FIELD_CODING_DYN:
   21054           0 :                 return 0;
   21055             :         default:
   21056           0 :                 return 6;
   21057             :         }
   21058           0 : }
   21059             : 
   21060             : static GF_Err BodyDefTable_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21061             : {
   21062           0 :         switch(IndexMode) {
   21063             :         case GF_SG_FIELD_CODING_IN:
   21064           0 :                 *allField = BodyDefTable_In2All[inField];
   21065           0 :                 return GF_OK;
   21066             :         case GF_SG_FIELD_CODING_DEF:
   21067           0 :                 *allField = BodyDefTable_Def2All[inField];
   21068           0 :                 return GF_OK;
   21069             :         case GF_SG_FIELD_CODING_OUT:
   21070           0 :                 *allField = BodyDefTable_Out2All[inField];
   21071           0 :                 return GF_OK;
   21072             :         default:
   21073           0 :                 return GF_BAD_PARAM;
   21074             :         }
   21075           0 : }
   21076             : static GF_Err BodyDefTable_get_field(GF_Node *node, GF_FieldInfo *info)
   21077             : {
   21078           0 :         switch (info->fieldIndex) {
   21079             :         case 0:
   21080           0 :                 info->name = "bodySceneGraphNodeName";
   21081           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21082           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   21083           0 :                 info->far_ptr = & ((M_BodyDefTable *) node)->bodySceneGraphNodeName;
   21084           0 :                 return GF_OK;
   21085             :         case 1:
   21086           0 :                 info->name = "bapIDs";
   21087           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21088           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21089           0 :                 info->far_ptr = & ((M_BodyDefTable *) node)->bapIDs;
   21090           0 :                 return GF_OK;
   21091             :         case 2:
   21092           0 :                 info->name = "vertexIds";
   21093           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21094           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21095           0 :                 info->far_ptr = & ((M_BodyDefTable *) node)->vertexIds;
   21096           0 :                 return GF_OK;
   21097             :         case 3:
   21098           0 :                 info->name = "bapCombinations";
   21099           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21100           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21101           0 :                 info->far_ptr = & ((M_BodyDefTable *) node)->bapCombinations;
   21102           0 :                 return GF_OK;
   21103             :         case 4:
   21104           0 :                 info->name = "displacements";
   21105           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21106           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   21107           0 :                 info->far_ptr = & ((M_BodyDefTable *) node)->displacements;
   21108           0 :                 return GF_OK;
   21109             :         case 5:
   21110           0 :                 info->name = "numInterpolateKeys";
   21111           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21112           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   21113           0 :                 info->far_ptr = & ((M_BodyDefTable *) node)->numInterpolateKeys;
   21114           0 :                 return GF_OK;
   21115             :         default:
   21116           0 :                 return GF_BAD_PARAM;
   21117             :         }
   21118           0 : }
   21119             : 
   21120             : 
   21121             : static s32 BodyDefTable_get_field_index_by_name(char *name)
   21122             : {
   21123           0 :         if (!strcmp("bodySceneGraphNodeName", name)) return 0;
   21124           0 :         if (!strcmp("bapIDs", name)) return 1;
   21125           0 :         if (!strcmp("vertexIds", name)) return 2;
   21126           0 :         if (!strcmp("bapCombinations", name)) return 3;
   21127           0 :         if (!strcmp("displacements", name)) return 4;
   21128           0 :         if (!strcmp("numInterpolateKeys", name)) return 5;
   21129           0 :         return -1;
   21130           0 : }
   21131             : static Bool BodyDefTable_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21132             : {
   21133           0 :         switch (FieldIndex) {
   21134             :         case 1:
   21135           0 :                 *AType = 0;
   21136           0 :                 *QType = 13;
   21137           0 :                 *QT13_bits = 9;
   21138           0 :                 *b_min = FLT2FIX(1);
   21139           0 :                 *b_max = FLT2FIX(296);
   21140           0 :                 return 1;
   21141             :         case 2:
   21142           0 :                 *AType = 0;
   21143           0 :                 *QType = 0;
   21144           0 :                 *b_min = FLT2FIX(0);
   21145           0 :                 *b_max = FIX_MAX;
   21146           0 :                 return 1;
   21147             :         case 3:
   21148           0 :                 *AType = 0;
   21149           0 :                 *QType = 0;
   21150           0 :                 *b_min = FIX_MIN;
   21151           0 :                 *b_max = FIX_MAX;
   21152           0 :                 return 1;
   21153             :         case 5:
   21154           0 :                 *AType = 0;
   21155           0 :                 *QType = 0;
   21156           0 :                 *b_min = FLT2FIX(2);
   21157           0 :                 *b_max = FIX_MAX;
   21158           0 :                 return 1;
   21159             :         default:
   21160           0 :                 return 0;
   21161             :         }
   21162           0 : }
   21163             : 
   21164             : 
   21165             : 
   21166             : GF_Node *BodyDefTable_Create()
   21167             : {
   21168             :         M_BodyDefTable *p;
   21169           0 :         GF_SAFEALLOC(p, M_BodyDefTable);
   21170           0 :         if(!p) return NULL;
   21171           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BodyDefTable);
   21172             : 
   21173             :         /*default field values*/
   21174           0 :         p->numInterpolateKeys = 2;
   21175           0 :         return (GF_Node *)p;
   21176           0 : }
   21177             : 
   21178             : 
   21179             : /*
   21180             :         BodySegmentConnectionHint Node deletion
   21181             : */
   21182             : 
   21183             : static void BodySegmentConnectionHint_Del(GF_Node *node)
   21184             : {
   21185           0 :         M_BodySegmentConnectionHint *p = (M_BodySegmentConnectionHint *) node;
   21186           0 :         gf_sg_sfstring_del(p->firstSegmentNodeName);
   21187           0 :         gf_sg_sfstring_del(p->secondSegmentNodeName);
   21188           0 :         gf_sg_mfint32_del(p->firstVertexIdList);
   21189           0 :         gf_sg_mfint32_del(p->secondVertexIdList);
   21190           0 :         gf_node_free((GF_Node *) p);
   21191           0 : }
   21192             : 
   21193             : static const u16 BodySegmentConnectionHint_Def2All[] = { 0, 1, 2, 3};
   21194             : static const u16 BodySegmentConnectionHint_In2All[] = { 0, 1, 2, 3};
   21195             : static const u16 BodySegmentConnectionHint_Out2All[] = { 0, 1, 2, 3};
   21196             : 
   21197             : static u32 BodySegmentConnectionHint_get_field_count(GF_Node *node, u8 IndexMode)
   21198             : {
   21199           0 :         switch(IndexMode) {
   21200             :         case GF_SG_FIELD_CODING_IN:
   21201           0 :                 return 4;
   21202             :         case GF_SG_FIELD_CODING_DEF:
   21203           0 :                 return 4;
   21204             :         case GF_SG_FIELD_CODING_OUT:
   21205           0 :                 return 4;
   21206             :         case GF_SG_FIELD_CODING_DYN:
   21207           0 :                 return 0;
   21208             :         default:
   21209           0 :                 return 4;
   21210             :         }
   21211           0 : }
   21212             : 
   21213             : static GF_Err BodySegmentConnectionHint_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21214             : {
   21215           0 :         switch(IndexMode) {
   21216             :         case GF_SG_FIELD_CODING_IN:
   21217           0 :                 *allField = BodySegmentConnectionHint_In2All[inField];
   21218           0 :                 return GF_OK;
   21219             :         case GF_SG_FIELD_CODING_DEF:
   21220           0 :                 *allField = BodySegmentConnectionHint_Def2All[inField];
   21221           0 :                 return GF_OK;
   21222             :         case GF_SG_FIELD_CODING_OUT:
   21223           0 :                 *allField = BodySegmentConnectionHint_Out2All[inField];
   21224           0 :                 return GF_OK;
   21225             :         default:
   21226           0 :                 return GF_BAD_PARAM;
   21227             :         }
   21228           0 : }
   21229             : static GF_Err BodySegmentConnectionHint_get_field(GF_Node *node, GF_FieldInfo *info)
   21230             : {
   21231           0 :         switch (info->fieldIndex) {
   21232             :         case 0:
   21233           0 :                 info->name = "firstSegmentNodeName";
   21234           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21235           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   21236           0 :                 info->far_ptr = & ((M_BodySegmentConnectionHint *) node)->firstSegmentNodeName;
   21237           0 :                 return GF_OK;
   21238             :         case 1:
   21239           0 :                 info->name = "secondSegmentNodeName";
   21240           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21241           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   21242           0 :                 info->far_ptr = & ((M_BodySegmentConnectionHint *) node)->secondSegmentNodeName;
   21243           0 :                 return GF_OK;
   21244             :         case 2:
   21245           0 :                 info->name = "firstVertexIdList";
   21246           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21247           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21248           0 :                 info->far_ptr = & ((M_BodySegmentConnectionHint *) node)->firstVertexIdList;
   21249           0 :                 return GF_OK;
   21250             :         case 3:
   21251           0 :                 info->name = "secondVertexIdList";
   21252           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21253           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21254           0 :                 info->far_ptr = & ((M_BodySegmentConnectionHint *) node)->secondVertexIdList;
   21255           0 :                 return GF_OK;
   21256             :         default:
   21257           0 :                 return GF_BAD_PARAM;
   21258             :         }
   21259           0 : }
   21260             : 
   21261             : 
   21262             : static s32 BodySegmentConnectionHint_get_field_index_by_name(char *name)
   21263             : {
   21264           0 :         if (!strcmp("firstSegmentNodeName", name)) return 0;
   21265           0 :         if (!strcmp("secondSegmentNodeName", name)) return 1;
   21266           0 :         if (!strcmp("firstVertexIdList", name)) return 2;
   21267           0 :         if (!strcmp("secondVertexIdList", name)) return 3;
   21268           0 :         return -1;
   21269           0 : }
   21270             : static Bool BodySegmentConnectionHint_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21271             : {
   21272           0 :         switch (FieldIndex) {
   21273             :         case 2:
   21274           0 :                 *AType = 0;
   21275           0 :                 *QType = 0;
   21276           0 :                 *b_min = FLT2FIX(0);
   21277           0 :                 *b_max = FIX_MAX;
   21278           0 :                 return 1;
   21279             :         case 3:
   21280           0 :                 *AType = 0;
   21281           0 :                 *QType = 0;
   21282           0 :                 *b_min = FLT2FIX(0);
   21283           0 :                 *b_max = FIX_MAX;
   21284           0 :                 return 1;
   21285             :         default:
   21286           0 :                 return 0;
   21287             :         }
   21288           0 : }
   21289             : 
   21290             : 
   21291             : 
   21292             : GF_Node *BodySegmentConnectionHint_Create()
   21293             : {
   21294             :         M_BodySegmentConnectionHint *p;
   21295           0 :         GF_SAFEALLOC(p, M_BodySegmentConnectionHint);
   21296           0 :         if(!p) return NULL;
   21297           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BodySegmentConnectionHint);
   21298             : 
   21299             :         /*default field values*/
   21300           0 :         return (GF_Node *)p;
   21301           0 : }
   21302             : 
   21303             : 
   21304             : /*
   21305             :         DirectiveSound Node deletion
   21306             : */
   21307             : 
   21308             : static void DirectiveSound_Del(GF_Node *node)
   21309             : {
   21310           0 :         M_DirectiveSound *p = (M_DirectiveSound *) node;
   21311           0 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   21312           0 :         gf_node_unregister((GF_Node *) p->perceptualParameters, (GF_Node *) p);
   21313           0 :         gf_sg_mffloat_del(p->directivity);
   21314           0 :         gf_sg_mffloat_del(p->angles);
   21315           0 :         gf_sg_mffloat_del(p->frequency);
   21316           0 :         gf_node_free((GF_Node *) p);
   21317           0 : }
   21318             : 
   21319             : static const u16 DirectiveSound_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   21320             : static const u16 DirectiveSound_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   21321             : static const u16 DirectiveSound_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   21322             : static const u16 DirectiveSound_Dyn2All[] = { 0, 1, 2};
   21323             : 
   21324             : static u32 DirectiveSound_get_field_count(GF_Node *node, u8 IndexMode)
   21325             : {
   21326           0 :         switch(IndexMode) {
   21327             :         case GF_SG_FIELD_CODING_IN:
   21328           0 :                 return 7;
   21329             :         case GF_SG_FIELD_CODING_DEF:
   21330           0 :                 return 13;
   21331             :         case GF_SG_FIELD_CODING_OUT:
   21332           0 :                 return 7;
   21333             :         case GF_SG_FIELD_CODING_DYN:
   21334           0 :                 return 3;
   21335             :         default:
   21336           0 :                 return 13;
   21337             :         }
   21338           0 : }
   21339             : 
   21340             : static GF_Err DirectiveSound_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21341             : {
   21342           0 :         switch(IndexMode) {
   21343             :         case GF_SG_FIELD_CODING_IN:
   21344           0 :                 *allField = DirectiveSound_In2All[inField];
   21345           0 :                 return GF_OK;
   21346             :         case GF_SG_FIELD_CODING_DEF:
   21347           0 :                 *allField = DirectiveSound_Def2All[inField];
   21348           0 :                 return GF_OK;
   21349             :         case GF_SG_FIELD_CODING_OUT:
   21350           0 :                 *allField = DirectiveSound_Out2All[inField];
   21351           0 :                 return GF_OK;
   21352             :         case GF_SG_FIELD_CODING_DYN:
   21353           0 :                 *allField = DirectiveSound_Dyn2All[inField];
   21354           0 :                 return GF_OK;
   21355             :         default:
   21356           0 :                 return GF_BAD_PARAM;
   21357             :         }
   21358           0 : }
   21359             : static GF_Err DirectiveSound_get_field(GF_Node *node, GF_FieldInfo *info)
   21360             : {
   21361           0 :         switch (info->fieldIndex) {
   21362             :         case 0:
   21363           0 :                 info->name = "direction";
   21364           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21365           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   21366           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->direction;
   21367           0 :                 return GF_OK;
   21368             :         case 1:
   21369           0 :                 info->name = "intensity";
   21370           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21371           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21372           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->intensity;
   21373           0 :                 return GF_OK;
   21374             :         case 2:
   21375           0 :                 info->name = "location";
   21376           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21377           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   21378           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->location;
   21379           0 :                 return GF_OK;
   21380             :         case 3:
   21381           0 :                 info->name = "source";
   21382           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21383           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   21384           0 :                 info->NDTtype = NDT_SFAudioNode;
   21385           0 :                 info->far_ptr = & ((M_DirectiveSound *)node)->source;
   21386           0 :                 return GF_OK;
   21387             :         case 4:
   21388           0 :                 info->name = "perceptualParameters";
   21389           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21390           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   21391           0 :                 info->NDTtype = NDT_SFPerceptualParameterNode;
   21392           0 :                 info->far_ptr = & ((M_DirectiveSound *)node)->perceptualParameters;
   21393           0 :                 return GF_OK;
   21394             :         case 5:
   21395           0 :                 info->name = "roomEffect";
   21396           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21397           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21398           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->roomEffect;
   21399           0 :                 return GF_OK;
   21400             :         case 6:
   21401           0 :                 info->name = "spatialize";
   21402           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21403           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21404           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->spatialize;
   21405           0 :                 return GF_OK;
   21406             :         case 7:
   21407           0 :                 info->name = "directivity";
   21408           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   21409           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21410           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->directivity;
   21411           0 :                 return GF_OK;
   21412             :         case 8:
   21413           0 :                 info->name = "angles";
   21414           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   21415           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21416           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->angles;
   21417           0 :                 return GF_OK;
   21418             :         case 9:
   21419           0 :                 info->name = "frequency";
   21420           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   21421           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21422           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->frequency;
   21423           0 :                 return GF_OK;
   21424             :         case 10:
   21425           0 :                 info->name = "speedOfSound";
   21426           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   21427           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21428           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->speedOfSound;
   21429           0 :                 return GF_OK;
   21430             :         case 11:
   21431           0 :                 info->name = "distance";
   21432           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   21433           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21434           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->distance;
   21435           0 :                 return GF_OK;
   21436             :         case 12:
   21437           0 :                 info->name = "useAirabs";
   21438           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   21439           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21440           0 :                 info->far_ptr = & ((M_DirectiveSound *) node)->useAirabs;
   21441           0 :                 return GF_OK;
   21442             :         default:
   21443           0 :                 return GF_BAD_PARAM;
   21444             :         }
   21445           0 : }
   21446             : 
   21447             : 
   21448             : static s32 DirectiveSound_get_field_index_by_name(char *name)
   21449             : {
   21450           0 :         if (!strcmp("direction", name)) return 0;
   21451           0 :         if (!strcmp("intensity", name)) return 1;
   21452           0 :         if (!strcmp("location", name)) return 2;
   21453           0 :         if (!strcmp("source", name)) return 3;
   21454           0 :         if (!strcmp("perceptualParameters", name)) return 4;
   21455           0 :         if (!strcmp("roomEffect", name)) return 5;
   21456           0 :         if (!strcmp("spatialize", name)) return 6;
   21457           0 :         if (!strcmp("directivity", name)) return 7;
   21458           0 :         if (!strcmp("angles", name)) return 8;
   21459           0 :         if (!strcmp("frequency", name)) return 9;
   21460           0 :         if (!strcmp("speedOfSound", name)) return 10;
   21461           0 :         if (!strcmp("distance", name)) return 11;
   21462           0 :         if (!strcmp("useAirabs", name)) return 12;
   21463           0 :         return -1;
   21464           0 : }
   21465             : static Bool DirectiveSound_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21466             : {
   21467           0 :         switch (FieldIndex) {
   21468             :         case 0:
   21469           0 :                 *AType = 9;
   21470           0 :                 *QType = 9;
   21471           0 :                 *b_min = FIX_MIN;
   21472           0 :                 *b_max = FIX_MAX;
   21473           0 :                 return 1;
   21474             :         case 1:
   21475           0 :                 *AType = 7;
   21476           0 :                 *QType = 0;
   21477           0 :                 *b_min = FLT2FIX(0);
   21478           0 :                 *b_max = FIX_MAX;
   21479           0 :                 return 1;
   21480             :         case 2:
   21481           0 :                 *AType = 1;
   21482           0 :                 *QType = 1;
   21483           0 :                 *b_min = FIX_MIN;
   21484           0 :                 *b_max = FIX_MAX;
   21485           0 :                 return 1;
   21486             :         case 7:
   21487           0 :                 *AType = 0;
   21488           0 :                 *QType = 0;
   21489           0 :                 *b_min = FIX_MIN;
   21490           0 :                 *b_max = FIX_MAX;
   21491           0 :                 return 1;
   21492             :         case 8:
   21493           0 :                 *AType = 0;
   21494           0 :                 *QType = 6;
   21495           0 :                 *b_min = FLT2FIX(0);
   21496           0 :                 *b_max = FLT2FIX(3.14159265);
   21497           0 :                 return 1;
   21498             :         case 9:
   21499           0 :                 *AType = 0;
   21500           0 :                 *QType = 0;
   21501           0 :                 *b_min = FLT2FIX(0);
   21502           0 :                 *b_max = FIX_MAX;
   21503           0 :                 return 1;
   21504             :         case 10:
   21505           0 :                 *AType = 0;
   21506           0 :                 *QType = 1;
   21507           0 :                 *b_min = FLT2FIX(0);
   21508           0 :                 *b_max = FIX_MAX;
   21509           0 :                 return 1;
   21510             :         case 11:
   21511           0 :                 *AType = 0;
   21512           0 :                 *QType = 0;
   21513           0 :                 *b_min = FLT2FIX(0);
   21514           0 :                 *b_max = FIX_MAX;
   21515           0 :                 return 1;
   21516             :         default:
   21517           0 :                 return 0;
   21518             :         }
   21519           0 : }
   21520             : 
   21521             : 
   21522             : 
   21523             : GF_Node *DirectiveSound_Create()
   21524             : {
   21525             :         M_DirectiveSound *p;
   21526           0 :         GF_SAFEALLOC(p, M_DirectiveSound);
   21527           0 :         if(!p) return NULL;
   21528           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DirectiveSound);
   21529             : 
   21530             :         /*default field values*/
   21531           0 :         p->direction.x = FLT2FIX(0);
   21532           0 :         p->direction.y = FLT2FIX(0);
   21533           0 :         p->direction.z = FLT2FIX(-1);
   21534           0 :         p->intensity = FLT2FIX(1);
   21535           0 :         p->location.x = FLT2FIX(0);
   21536           0 :         p->location.y = FLT2FIX(0);
   21537           0 :         p->location.z = FLT2FIX(0);
   21538           0 :         p->spatialize = 1;
   21539           0 :         p->directivity.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   21540           0 :         p->directivity.count = 1;
   21541           0 :         p->directivity.vals[0] = FLT2FIX(1);
   21542           0 :         p->angles.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   21543           0 :         p->angles.count = 1;
   21544           0 :         p->angles.vals[0] = FLT2FIX(1);
   21545           0 :         p->speedOfSound = FLT2FIX(340);
   21546           0 :         p->distance = FLT2FIX(100);
   21547           0 :         return (GF_Node *)p;
   21548           0 : }
   21549             : 
   21550             : 
   21551             : /*
   21552             :         Hierarchical3DMesh Node deletion
   21553             : */
   21554             : 
   21555             : static void Hierarchical3DMesh_Del(GF_Node *node)
   21556             : {
   21557           0 :         M_Hierarchical3DMesh *p = (M_Hierarchical3DMesh *) node;
   21558           0 :         gf_sg_mfurl_del(p->url);
   21559           0 :         gf_node_free((GF_Node *) p);
   21560           0 : }
   21561             : 
   21562             : static const u16 Hierarchical3DMesh_Def2All[] = { 1, 2};
   21563             : static const u16 Hierarchical3DMesh_In2All[] = { 0, 1};
   21564             : static const u16 Hierarchical3DMesh_Out2All[] = { 1, 3};
   21565             : 
   21566             : static u32 Hierarchical3DMesh_get_field_count(GF_Node *node, u8 IndexMode)
   21567             : {
   21568           0 :         switch(IndexMode) {
   21569             :         case GF_SG_FIELD_CODING_IN:
   21570           0 :                 return 2;
   21571             :         case GF_SG_FIELD_CODING_DEF:
   21572           0 :                 return 2;
   21573             :         case GF_SG_FIELD_CODING_OUT:
   21574           0 :                 return 2;
   21575             :         case GF_SG_FIELD_CODING_DYN:
   21576           0 :                 return 0;
   21577             :         default:
   21578           0 :                 return 4;
   21579             :         }
   21580           0 : }
   21581             : 
   21582             : static GF_Err Hierarchical3DMesh_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21583             : {
   21584           0 :         switch(IndexMode) {
   21585             :         case GF_SG_FIELD_CODING_IN:
   21586           0 :                 *allField = Hierarchical3DMesh_In2All[inField];
   21587           0 :                 return GF_OK;
   21588             :         case GF_SG_FIELD_CODING_DEF:
   21589           0 :                 *allField = Hierarchical3DMesh_Def2All[inField];
   21590           0 :                 return GF_OK;
   21591             :         case GF_SG_FIELD_CODING_OUT:
   21592           0 :                 *allField = Hierarchical3DMesh_Out2All[inField];
   21593           0 :                 return GF_OK;
   21594             :         default:
   21595           0 :                 return GF_BAD_PARAM;
   21596             :         }
   21597           0 : }
   21598             : static GF_Err Hierarchical3DMesh_get_field(GF_Node *node, GF_FieldInfo *info)
   21599             : {
   21600           0 :         switch (info->fieldIndex) {
   21601             :         case 0:
   21602           0 :                 info->name = "triangleBudget";
   21603           0 :                 info->eventType = GF_SG_EVENT_IN;
   21604           0 :                 info->on_event_in = ((M_Hierarchical3DMesh *)node)->on_triangleBudget;
   21605           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   21606           0 :                 info->far_ptr = & ((M_Hierarchical3DMesh *) node)->triangleBudget;
   21607           0 :                 return GF_OK;
   21608             :         case 1:
   21609           0 :                 info->name = "level";
   21610           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21611           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21612           0 :                 info->far_ptr = & ((M_Hierarchical3DMesh *) node)->level;
   21613           0 :                 return GF_OK;
   21614             :         case 2:
   21615           0 :                 info->name = "url";
   21616           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   21617           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   21618           0 :                 info->far_ptr = & ((M_Hierarchical3DMesh *) node)->url;
   21619           0 :                 return GF_OK;
   21620             :         case 3:
   21621           0 :                 info->name = "doneLoading";
   21622           0 :                 info->eventType = GF_SG_EVENT_OUT;
   21623           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21624           0 :                 info->far_ptr = & ((M_Hierarchical3DMesh *) node)->doneLoading;
   21625           0 :                 return GF_OK;
   21626             :         default:
   21627           0 :                 return GF_BAD_PARAM;
   21628             :         }
   21629           0 : }
   21630             : 
   21631             : 
   21632             : static s32 Hierarchical3DMesh_get_field_index_by_name(char *name)
   21633             : {
   21634           0 :         if (!strcmp("triangleBudget", name)) return 0;
   21635           0 :         if (!strcmp("level", name)) return 1;
   21636           0 :         if (!strcmp("url", name)) return 2;
   21637           0 :         if (!strcmp("doneLoading", name)) return 3;
   21638           0 :         return -1;
   21639           0 : }
   21640             : static Bool Hierarchical3DMesh_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21641             : {
   21642           0 :         switch (FieldIndex) {
   21643             :         case 0:
   21644           0 :                 *AType = 0;
   21645           0 :                 *QType = 0;
   21646           0 :                 *b_min = FLT2FIX(-1);
   21647           0 :                 *b_max = FIX_MAX;
   21648           0 :                 return 1;
   21649             :         case 1:
   21650           0 :                 *AType = 0;
   21651           0 :                 *QType = 0;
   21652           0 :                 *b_min = FLT2FIX(-1);
   21653           0 :                 *b_max = FIX_MAX;
   21654           0 :                 return 1;
   21655             :         default:
   21656           0 :                 return 0;
   21657             :         }
   21658           0 : }
   21659             : 
   21660             : 
   21661             : 
   21662             : GF_Node *Hierarchical3DMesh_Create()
   21663             : {
   21664             :         M_Hierarchical3DMesh *p;
   21665           0 :         GF_SAFEALLOC(p, M_Hierarchical3DMesh);
   21666           0 :         if(!p) return NULL;
   21667           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Hierarchical3DMesh);
   21668             : 
   21669             :         /*default field values*/
   21670           0 :         p->level = FLT2FIX(1);
   21671           0 :         return (GF_Node *)p;
   21672           0 : }
   21673             : 
   21674             : 
   21675             : /*
   21676             :         MaterialKey Node deletion
   21677             : */
   21678             : 
   21679             : static void MaterialKey_Del(GF_Node *node)
   21680             : {
   21681          36 :         M_MaterialKey *p = (M_MaterialKey *) node;
   21682          18 :         gf_node_free((GF_Node *) p);
   21683          18 : }
   21684             : 
   21685             : static const u16 MaterialKey_Def2All[] = { 0, 1, 2, 3, 4, 5};
   21686             : static const u16 MaterialKey_In2All[] = { 0, 1, 2, 3, 4, 5};
   21687             : static const u16 MaterialKey_Out2All[] = { 0, 1, 2, 3, 4, 5};
   21688             : static const u16 MaterialKey_Dyn2All[] = { 2, 3, 4, 5};
   21689             : 
   21690             : static u32 MaterialKey_get_field_count(GF_Node *node, u8 IndexMode)
   21691             : {
   21692          32 :         switch(IndexMode) {
   21693             :         case GF_SG_FIELD_CODING_IN:
   21694           0 :                 return 6;
   21695             :         case GF_SG_FIELD_CODING_DEF:
   21696           9 :                 return 6;
   21697             :         case GF_SG_FIELD_CODING_OUT:
   21698           0 :                 return 6;
   21699             :         case GF_SG_FIELD_CODING_DYN:
   21700           0 :                 return 4;
   21701             :         default:
   21702           7 :                 return 6;
   21703             :         }
   21704          16 : }
   21705             : 
   21706             : static GF_Err MaterialKey_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21707             : {
   21708          54 :         switch(IndexMode) {
   21709             :         case GF_SG_FIELD_CODING_IN:
   21710           0 :                 *allField = MaterialKey_In2All[inField];
   21711           0 :                 return GF_OK;
   21712             :         case GF_SG_FIELD_CODING_DEF:
   21713          27 :                 *allField = MaterialKey_Def2All[inField];
   21714          27 :                 return GF_OK;
   21715             :         case GF_SG_FIELD_CODING_OUT:
   21716           0 :                 *allField = MaterialKey_Out2All[inField];
   21717           0 :                 return GF_OK;
   21718             :         case GF_SG_FIELD_CODING_DYN:
   21719           0 :                 *allField = MaterialKey_Dyn2All[inField];
   21720           0 :                 return GF_OK;
   21721             :         default:
   21722           0 :                 return GF_BAD_PARAM;
   21723             :         }
   21724          27 : }
   21725             : static GF_Err MaterialKey_get_field(GF_Node *node, GF_FieldInfo *info)
   21726             : {
   21727         314 :         switch (info->fieldIndex) {
   21728             :         case 0:
   21729          20 :                 info->name = "isKeyed";
   21730          20 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21731          20 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21732          20 :                 info->far_ptr = & ((M_MaterialKey *) node)->isKeyed;
   21733          20 :                 return GF_OK;
   21734             :         case 1:
   21735          18 :                 info->name = "isRGB";
   21736          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21737          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21738          18 :                 info->far_ptr = & ((M_MaterialKey *) node)->isRGB;
   21739          18 :                 return GF_OK;
   21740             :         case 2:
   21741          33 :                 info->name = "keyColor";
   21742          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21743          33 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   21744          33 :                 info->far_ptr = & ((M_MaterialKey *) node)->keyColor;
   21745          33 :                 return GF_OK;
   21746             :         case 3:
   21747          33 :                 info->name = "lowThreshold";
   21748          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21749          33 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21750          33 :                 info->far_ptr = & ((M_MaterialKey *) node)->lowThreshold;
   21751          33 :                 return GF_OK;
   21752             :         case 4:
   21753          33 :                 info->name = "highThreshold";
   21754          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21755          33 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21756          33 :                 info->far_ptr = & ((M_MaterialKey *) node)->highThreshold;
   21757          33 :                 return GF_OK;
   21758             :         case 5:
   21759          20 :                 info->name = "transparency";
   21760          20 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21761          20 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21762          20 :                 info->far_ptr = & ((M_MaterialKey *) node)->transparency;
   21763          20 :                 return GF_OK;
   21764             :         default:
   21765           0 :                 return GF_BAD_PARAM;
   21766             :         }
   21767         157 : }
   21768             : 
   21769             : 
   21770             : static s32 MaterialKey_get_field_index_by_name(char *name)
   21771             : {
   21772          34 :         if (!strcmp("isKeyed", name)) return 0;
   21773          14 :         if (!strcmp("isRGB", name)) return 1;
   21774          18 :         if (!strcmp("keyColor", name)) return 2;
   21775          14 :         if (!strcmp("lowThreshold", name)) return 3;
   21776          10 :         if (!strcmp("highThreshold", name)) return 4;
   21777           4 :         if (!strcmp("transparency", name)) return 5;
   21778           0 :         return -1;
   21779          16 : }
   21780             : static Bool MaterialKey_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21781             : {
   21782           0 :         switch (FieldIndex) {
   21783             :         case 2:
   21784           0 :                 *AType = 4;
   21785           0 :                 *QType = 4;
   21786           0 :                 *b_min = FLT2FIX(0);
   21787           0 :                 *b_max = FLT2FIX(1);
   21788           0 :                 return 1;
   21789             :         case 3:
   21790           0 :                 *AType = 8;
   21791           0 :                 *QType = 4;
   21792           0 :                 *b_min = FLT2FIX(0);
   21793           0 :                 *b_max = FLT2FIX(1);
   21794           0 :                 return 1;
   21795             :         case 4:
   21796           0 :                 *AType = 8;
   21797           0 :                 *QType = 4;
   21798           0 :                 *b_min = FLT2FIX(0);
   21799           0 :                 *b_max = FLT2FIX(1);
   21800           0 :                 return 1;
   21801             :         case 5:
   21802           0 :                 *AType = 8;
   21803           0 :                 *QType = 4;
   21804           0 :                 *b_min = FLT2FIX(0);
   21805           0 :                 *b_max = FLT2FIX(1);
   21806           0 :                 return 1;
   21807             :         default:
   21808           0 :                 return 0;
   21809             :         }
   21810           0 : }
   21811             : 
   21812             : 
   21813             : 
   21814             : GF_Node *MaterialKey_Create()
   21815             : {
   21816             :         M_MaterialKey *p;
   21817          54 :         GF_SAFEALLOC(p, M_MaterialKey);
   21818          18 :         if(!p) return NULL;
   21819          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MaterialKey);
   21820             : 
   21821             :         /*default field values*/
   21822          18 :         p->isKeyed = 1;
   21823          18 :         p->isRGB = 1;
   21824          18 :         p->keyColor.red = FLT2FIX(0);
   21825          18 :         p->keyColor.green = FLT2FIX(0);
   21826          18 :         p->keyColor.blue = FLT2FIX(0);
   21827          18 :         p->lowThreshold = FLT2FIX(0);
   21828          18 :         p->highThreshold = FLT2FIX(0);
   21829          18 :         p->transparency = FLT2FIX(0);
   21830          18 :         return (GF_Node *)p;
   21831          18 : }
   21832             : 
   21833             : 
   21834             : /*
   21835             :         PerceptualParameters Node deletion
   21836             : */
   21837             : 
   21838             : static void PerceptualParameters_Del(GF_Node *node)
   21839             : {
   21840           0 :         M_PerceptualParameters *p = (M_PerceptualParameters *) node;
   21841           0 :         gf_sg_mffloat_del(p->omniDirectivity);
   21842           0 :         gf_sg_mffloat_del(p->directFilterGains);
   21843           0 :         gf_sg_mffloat_del(p->inputFilterGains);
   21844           0 :         gf_node_free((GF_Node *) p);
   21845           0 : }
   21846             : 
   21847             : static const u16 PerceptualParameters_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   21848             : static const u16 PerceptualParameters_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   21849             : static const u16 PerceptualParameters_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   21850             : static const u16 PerceptualParameters_Dyn2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   21851             : 
   21852             : static u32 PerceptualParameters_get_field_count(GF_Node *node, u8 IndexMode)
   21853             : {
   21854           0 :         switch(IndexMode) {
   21855             :         case GF_SG_FIELD_CODING_IN:
   21856           0 :                 return 19;
   21857             :         case GF_SG_FIELD_CODING_DEF:
   21858           0 :                 return 19;
   21859             :         case GF_SG_FIELD_CODING_OUT:
   21860           0 :                 return 19;
   21861             :         case GF_SG_FIELD_CODING_DYN:
   21862           0 :                 return 15;
   21863             :         default:
   21864           0 :                 return 19;
   21865             :         }
   21866           0 : }
   21867             : 
   21868             : static GF_Err PerceptualParameters_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21869             : {
   21870           0 :         switch(IndexMode) {
   21871             :         case GF_SG_FIELD_CODING_IN:
   21872           0 :                 *allField = PerceptualParameters_In2All[inField];
   21873           0 :                 return GF_OK;
   21874             :         case GF_SG_FIELD_CODING_DEF:
   21875           0 :                 *allField = PerceptualParameters_Def2All[inField];
   21876           0 :                 return GF_OK;
   21877             :         case GF_SG_FIELD_CODING_OUT:
   21878           0 :                 *allField = PerceptualParameters_Out2All[inField];
   21879           0 :                 return GF_OK;
   21880             :         case GF_SG_FIELD_CODING_DYN:
   21881           0 :                 *allField = PerceptualParameters_Dyn2All[inField];
   21882           0 :                 return GF_OK;
   21883             :         default:
   21884           0 :                 return GF_BAD_PARAM;
   21885             :         }
   21886           0 : }
   21887             : static GF_Err PerceptualParameters_get_field(GF_Node *node, GF_FieldInfo *info)
   21888             : {
   21889           0 :         switch (info->fieldIndex) {
   21890             :         case 0:
   21891           0 :                 info->name = "sourcePresence";
   21892           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21893           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21894           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->sourcePresence;
   21895           0 :                 return GF_OK;
   21896             :         case 1:
   21897           0 :                 info->name = "sourceWarmth";
   21898           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21899           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21900           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->sourceWarmth;
   21901           0 :                 return GF_OK;
   21902             :         case 2:
   21903           0 :                 info->name = "sourceBrilliance";
   21904           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21905           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21906           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->sourceBrilliance;
   21907           0 :                 return GF_OK;
   21908             :         case 3:
   21909           0 :                 info->name = "roomPresence";
   21910           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21911           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21912           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->roomPresence;
   21913           0 :                 return GF_OK;
   21914             :         case 4:
   21915           0 :                 info->name = "runningReverberance";
   21916           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21917           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21918           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->runningReverberance;
   21919           0 :                 return GF_OK;
   21920             :         case 5:
   21921           0 :                 info->name = "envelopment";
   21922           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21923           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21924           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->envelopment;
   21925           0 :                 return GF_OK;
   21926             :         case 6:
   21927           0 :                 info->name = "lateReverberance";
   21928           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21929           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21930           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->lateReverberance;
   21931           0 :                 return GF_OK;
   21932             :         case 7:
   21933           0 :                 info->name = "heavyness";
   21934           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21935           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21936           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->heavyness;
   21937           0 :                 return GF_OK;
   21938             :         case 8:
   21939           0 :                 info->name = "liveness";
   21940           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21941           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21942           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->liveness;
   21943           0 :                 return GF_OK;
   21944             :         case 9:
   21945           0 :                 info->name = "omniDirectivity";
   21946           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21947           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21948           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->omniDirectivity;
   21949           0 :                 return GF_OK;
   21950             :         case 10:
   21951           0 :                 info->name = "directFilterGains";
   21952           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21953           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21954           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->directFilterGains;
   21955           0 :                 return GF_OK;
   21956             :         case 11:
   21957           0 :                 info->name = "inputFilterGains";
   21958           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21959           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21960           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->inputFilterGains;
   21961           0 :                 return GF_OK;
   21962             :         case 12:
   21963           0 :                 info->name = "refDistance";
   21964           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21965           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21966           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->refDistance;
   21967           0 :                 return GF_OK;
   21968             :         case 13:
   21969           0 :                 info->name = "freqLow";
   21970           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21971           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21972           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->freqLow;
   21973           0 :                 return GF_OK;
   21974             :         case 14:
   21975           0 :                 info->name = "freqHigh";
   21976           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21977           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21978           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->freqHigh;
   21979           0 :                 return GF_OK;
   21980             :         case 15:
   21981           0 :                 info->name = "timeLimit1";
   21982           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21983           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   21984           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->timeLimit1;
   21985           0 :                 return GF_OK;
   21986             :         case 16:
   21987           0 :                 info->name = "timeLimit2";
   21988           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21989           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   21990           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->timeLimit2;
   21991           0 :                 return GF_OK;
   21992             :         case 17:
   21993           0 :                 info->name = "timeLimit3";
   21994           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21995           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   21996           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->timeLimit3;
   21997           0 :                 return GF_OK;
   21998             :         case 18:
   21999           0 :                 info->name = "modalDensity";
   22000           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22001           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22002           0 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->modalDensity;
   22003           0 :                 return GF_OK;
   22004             :         default:
   22005           0 :                 return GF_BAD_PARAM;
   22006             :         }
   22007           0 : }
   22008             : 
   22009             : 
   22010             : static s32 PerceptualParameters_get_field_index_by_name(char *name)
   22011             : {
   22012           0 :         if (!strcmp("sourcePresence", name)) return 0;
   22013           0 :         if (!strcmp("sourceWarmth", name)) return 1;
   22014           0 :         if (!strcmp("sourceBrilliance", name)) return 2;
   22015           0 :         if (!strcmp("roomPresence", name)) return 3;
   22016           0 :         if (!strcmp("runningReverberance", name)) return 4;
   22017           0 :         if (!strcmp("envelopment", name)) return 5;
   22018           0 :         if (!strcmp("lateReverberance", name)) return 6;
   22019           0 :         if (!strcmp("heavyness", name)) return 7;
   22020           0 :         if (!strcmp("liveness", name)) return 8;
   22021           0 :         if (!strcmp("omniDirectivity", name)) return 9;
   22022           0 :         if (!strcmp("directFilterGains", name)) return 10;
   22023           0 :         if (!strcmp("inputFilterGains", name)) return 11;
   22024           0 :         if (!strcmp("refDistance", name)) return 12;
   22025           0 :         if (!strcmp("freqLow", name)) return 13;
   22026           0 :         if (!strcmp("freqHigh", name)) return 14;
   22027           0 :         if (!strcmp("timeLimit1", name)) return 15;
   22028           0 :         if (!strcmp("timeLimit2", name)) return 16;
   22029           0 :         if (!strcmp("timeLimit3", name)) return 17;
   22030           0 :         if (!strcmp("modalDensity", name)) return 18;
   22031           0 :         return -1;
   22032           0 : }
   22033             : static Bool PerceptualParameters_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22034             : {
   22035           0 :         switch (FieldIndex) {
   22036             :         case 0:
   22037           0 :                 *AType = 7;
   22038           0 :                 *QType = 0;
   22039           0 :                 *b_min = FIX_MIN;
   22040           0 :                 *b_max = FIX_MAX;
   22041           0 :                 return 1;
   22042             :         case 1:
   22043           0 :                 *AType = 7;
   22044           0 :                 *QType = 0;
   22045           0 :                 *b_min = FIX_MIN;
   22046           0 :                 *b_max = FIX_MAX;
   22047           0 :                 return 1;
   22048             :         case 2:
   22049           0 :                 *AType = 7;
   22050           0 :                 *QType = 0;
   22051           0 :                 *b_min = FIX_MIN;
   22052           0 :                 *b_max = FIX_MAX;
   22053           0 :                 return 1;
   22054             :         case 3:
   22055           0 :                 *AType = 7;
   22056           0 :                 *QType = 0;
   22057           0 :                 *b_min = FIX_MIN;
   22058           0 :                 *b_max = FIX_MAX;
   22059           0 :                 return 1;
   22060             :         case 4:
   22061           0 :                 *AType = 7;
   22062           0 :                 *QType = 0;
   22063           0 :                 *b_min = FIX_MIN;
   22064           0 :                 *b_max = FIX_MAX;
   22065           0 :                 return 1;
   22066             :         case 5:
   22067           0 :                 *AType = 7;
   22068           0 :                 *QType = 0;
   22069           0 :                 *b_min = FIX_MIN;
   22070           0 :                 *b_max = FIX_MAX;
   22071           0 :                 return 1;
   22072             :         case 6:
   22073           0 :                 *AType = 7;
   22074           0 :                 *QType = 0;
   22075           0 :                 *b_min = FIX_MIN;
   22076           0 :                 *b_max = FIX_MAX;
   22077           0 :                 return 1;
   22078             :         case 7:
   22079           0 :                 *AType = 7;
   22080           0 :                 *QType = 0;
   22081           0 :                 *b_min = FIX_MIN;
   22082           0 :                 *b_max = FIX_MAX;
   22083           0 :                 return 1;
   22084             :         case 8:
   22085           0 :                 *AType = 7;
   22086           0 :                 *QType = 0;
   22087           0 :                 *b_min = FIX_MIN;
   22088           0 :                 *b_max = FIX_MAX;
   22089           0 :                 return 1;
   22090             :         case 9:
   22091           0 :                 *AType = 7;
   22092           0 :                 *QType = 0;
   22093           0 :                 *b_min = FIX_MIN;
   22094           0 :                 *b_max = FIX_MAX;
   22095           0 :                 return 1;
   22096             :         case 10:
   22097           0 :                 *AType = 7;
   22098           0 :                 *QType = 0;
   22099           0 :                 *b_min = FIX_MIN;
   22100           0 :                 *b_max = FIX_MAX;
   22101           0 :                 return 1;
   22102             :         case 11:
   22103           0 :                 *AType = 7;
   22104           0 :                 *QType = 0;
   22105           0 :                 *b_min = FIX_MIN;
   22106           0 :                 *b_max = FIX_MAX;
   22107           0 :                 return 1;
   22108             :         case 12:
   22109           0 :                 *AType = 7;
   22110           0 :                 *QType = 0;
   22111           0 :                 *b_min = FIX_MIN;
   22112           0 :                 *b_max = FIX_MAX;
   22113           0 :                 return 1;
   22114             :         case 13:
   22115           0 :                 *AType = 7;
   22116           0 :                 *QType = 0;
   22117           0 :                 *b_min = FIX_MIN;
   22118           0 :                 *b_max = FIX_MAX;
   22119           0 :                 return 1;
   22120             :         case 14:
   22121           0 :                 *AType = 7;
   22122           0 :                 *QType = 0;
   22123           0 :                 *b_min = FIX_MIN;
   22124           0 :                 *b_max = FIX_MAX;
   22125           0 :                 return 1;
   22126             :         case 15:
   22127           0 :                 *AType = 0;
   22128           0 :                 *QType = 0;
   22129           0 :                 *b_min = FIX_MIN;
   22130           0 :                 *b_max = FIX_MAX;
   22131           0 :                 return 1;
   22132             :         case 16:
   22133           0 :                 *AType = 0;
   22134           0 :                 *QType = 0;
   22135           0 :                 *b_min = FIX_MIN;
   22136           0 :                 *b_max = FIX_MAX;
   22137           0 :                 return 1;
   22138             :         case 17:
   22139           0 :                 *AType = 0;
   22140           0 :                 *QType = 0;
   22141           0 :                 *b_min = FIX_MIN;
   22142           0 :                 *b_max = FIX_MAX;
   22143           0 :                 return 1;
   22144             :         case 18:
   22145           0 :                 *AType = 0;
   22146           0 :                 *QType = 0;
   22147           0 :                 *b_min = FIX_MIN;
   22148           0 :                 *b_max = FIX_MAX;
   22149           0 :                 return 1;
   22150             :         default:
   22151           0 :                 return 0;
   22152             :         }
   22153           0 : }
   22154             : 
   22155             : 
   22156             : 
   22157             : GF_Node *PerceptualParameters_Create()
   22158             : {
   22159             :         M_PerceptualParameters *p;
   22160           0 :         GF_SAFEALLOC(p, M_PerceptualParameters);
   22161           0 :         if(!p) return NULL;
   22162           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PerceptualParameters);
   22163             : 
   22164             :         /*default field values*/
   22165           0 :         p->sourcePresence = FLT2FIX(1.0);
   22166           0 :         p->sourceWarmth = FLT2FIX(1.0);
   22167           0 :         p->sourceBrilliance = FLT2FIX(1.0);
   22168           0 :         p->roomPresence = FLT2FIX(1.0);
   22169           0 :         p->runningReverberance = FLT2FIX(1.0);
   22170           0 :         p->envelopment = FLT2FIX(0.0);
   22171           0 :         p->lateReverberance = FLT2FIX(1.0);
   22172           0 :         p->heavyness = FLT2FIX(1.0);
   22173           0 :         p->liveness = FLT2FIX(1.0);
   22174           0 :         p->omniDirectivity.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   22175           0 :         p->omniDirectivity.count = 1;
   22176           0 :         p->omniDirectivity.vals[0] = FLT2FIX(1.0);
   22177           0 :         p->directFilterGains.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*3);
   22178           0 :         p->directFilterGains.count = 3;
   22179           0 :         p->directFilterGains.vals[0] = FLT2FIX(1.0);
   22180           0 :         p->directFilterGains.vals[1] = FLT2FIX(1.0);
   22181           0 :         p->directFilterGains.vals[2] = FLT2FIX(1.0);
   22182           0 :         p->inputFilterGains.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*3);
   22183           0 :         p->inputFilterGains.count = 3;
   22184           0 :         p->inputFilterGains.vals[0] = FLT2FIX(1.0);
   22185           0 :         p->inputFilterGains.vals[1] = FLT2FIX(1.0);
   22186           0 :         p->inputFilterGains.vals[2] = FLT2FIX(1.0);
   22187           0 :         p->refDistance = FLT2FIX(1.0);
   22188           0 :         p->freqLow = FLT2FIX(250.0);
   22189           0 :         p->freqHigh = FLT2FIX(4000.0);
   22190           0 :         p->timeLimit1 = 0.02;
   22191           0 :         p->timeLimit2 = 0.04;
   22192           0 :         p->timeLimit3 = 0.1;
   22193           0 :         p->modalDensity = 0.8;
   22194           0 :         return (GF_Node *)p;
   22195           0 : }
   22196             : 
   22197             : 
   22198             : /*
   22199             :         TemporalTransform Node deletion
   22200             : */
   22201             : 
   22202             : static void TemporalTransform_Del(GF_Node *node)
   22203             : {
   22204           0 :         M_TemporalTransform *p = (M_TemporalTransform *) node;
   22205           0 :         gf_sg_mfurl_del(p->url);
   22206           0 :         gf_sg_mfint32_del(p->stretchMode);
   22207           0 :         gf_sg_mfint32_del(p->shrinkMode);
   22208           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   22209           0 :         gf_node_free((GF_Node *) p);
   22210           0 : }
   22211             : 
   22212             : static const u16 TemporalTransform_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   22213             : static const u16 TemporalTransform_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   22214             : static const u16 TemporalTransform_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   22215             : static const u16 TemporalTransform_Dyn2All[] = { 7, 8};
   22216             : 
   22217             : static u32 TemporalTransform_get_field_count(GF_Node *node, u8 IndexMode)
   22218             : {
   22219           0 :         switch(IndexMode) {
   22220             :         case GF_SG_FIELD_CODING_IN:
   22221           0 :                 return 12;
   22222             :         case GF_SG_FIELD_CODING_DEF:
   22223           0 :                 return 10;
   22224             :         case GF_SG_FIELD_CODING_OUT:
   22225           0 :                 return 11;
   22226             :         case GF_SG_FIELD_CODING_DYN:
   22227           0 :                 return 2;
   22228             :         default:
   22229           0 :                 return 13;
   22230             :         }
   22231           0 : }
   22232             : 
   22233             : static GF_Err TemporalTransform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22234             : {
   22235           0 :         switch(IndexMode) {
   22236             :         case GF_SG_FIELD_CODING_IN:
   22237           0 :                 *allField = TemporalTransform_In2All[inField];
   22238           0 :                 return GF_OK;
   22239             :         case GF_SG_FIELD_CODING_DEF:
   22240           0 :                 *allField = TemporalTransform_Def2All[inField];
   22241           0 :                 return GF_OK;
   22242             :         case GF_SG_FIELD_CODING_OUT:
   22243           0 :                 *allField = TemporalTransform_Out2All[inField];
   22244           0 :                 return GF_OK;
   22245             :         case GF_SG_FIELD_CODING_DYN:
   22246           0 :                 *allField = TemporalTransform_Dyn2All[inField];
   22247           0 :                 return GF_OK;
   22248             :         default:
   22249           0 :                 return GF_BAD_PARAM;
   22250             :         }
   22251           0 : }
   22252             : static GF_Err TemporalTransform_get_field(GF_Node *node, GF_FieldInfo *info)
   22253             : {
   22254           0 :         switch (info->fieldIndex) {
   22255             :         case 0:
   22256           0 :                 info->name = "addChildren";
   22257           0 :                 info->eventType = GF_SG_EVENT_IN;
   22258           0 :                 info->on_event_in = ((M_TemporalTransform *)node)->on_addChildren;
   22259           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22260           0 :                 info->NDTtype = NDT_SF3DNode;
   22261           0 :                 info->far_ptr = & ((M_TemporalTransform *)node)->addChildren;
   22262           0 :                 return GF_OK;
   22263             :         case 1:
   22264           0 :                 info->name = "removeChildren";
   22265           0 :                 info->eventType = GF_SG_EVENT_IN;
   22266           0 :                 info->on_event_in = ((M_TemporalTransform *)node)->on_removeChildren;
   22267           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22268           0 :                 info->NDTtype = NDT_SF3DNode;
   22269           0 :                 info->far_ptr = & ((M_TemporalTransform *)node)->removeChildren;
   22270           0 :                 return GF_OK;
   22271             :         case 2:
   22272           0 :                 info->name = "children";
   22273           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22274           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22275           0 :                 info->NDTtype = NDT_SF3DNode;
   22276           0 :                 info->far_ptr = & ((M_TemporalTransform *)node)->children;
   22277           0 :                 return GF_OK;
   22278             :         case 3:
   22279           0 :                 info->name = "url";
   22280           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22281           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   22282           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->url;
   22283           0 :                 return GF_OK;
   22284             :         case 4:
   22285           0 :                 info->name = "startTime";
   22286           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22287           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22288           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->startTime;
   22289           0 :                 return GF_OK;
   22290             :         case 5:
   22291           0 :                 info->name = "optimalDuration";
   22292           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22293           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22294           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->optimalDuration;
   22295           0 :                 return GF_OK;
   22296             :         case 6:
   22297           0 :                 info->name = "active";
   22298           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22299           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22300           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->active;
   22301           0 :                 return GF_OK;
   22302             :         case 7:
   22303           0 :                 info->name = "speed";
   22304           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22305           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   22306           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->speed;
   22307           0 :                 return GF_OK;
   22308             :         case 8:
   22309           0 :                 info->name = "scalability";
   22310           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22311           0 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   22312           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->scalability;
   22313           0 :                 return GF_OK;
   22314             :         case 9:
   22315           0 :                 info->name = "stretchMode";
   22316           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22317           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   22318           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->stretchMode;
   22319           0 :                 return GF_OK;
   22320             :         case 10:
   22321           0 :                 info->name = "shrinkMode";
   22322           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22323           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   22324           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->shrinkMode;
   22325           0 :                 return GF_OK;
   22326             :         case 11:
   22327           0 :                 info->name = "maxDelay";
   22328           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22329           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22330           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->maxDelay;
   22331           0 :                 return GF_OK;
   22332             :         case 12:
   22333           0 :                 info->name = "actualDuration";
   22334           0 :                 info->eventType = GF_SG_EVENT_OUT;
   22335           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22336           0 :                 info->far_ptr = & ((M_TemporalTransform *) node)->actualDuration;
   22337           0 :                 return GF_OK;
   22338             :         default:
   22339           0 :                 return GF_BAD_PARAM;
   22340             :         }
   22341           0 : }
   22342             : 
   22343             : 
   22344             : static s32 TemporalTransform_get_field_index_by_name(char *name)
   22345             : {
   22346           0 :         if (!strcmp("addChildren", name)) return 0;
   22347           0 :         if (!strcmp("removeChildren", name)) return 1;
   22348           0 :         if (!strcmp("children", name)) return 2;
   22349           0 :         if (!strcmp("url", name)) return 3;
   22350           0 :         if (!strcmp("startTime", name)) return 4;
   22351           0 :         if (!strcmp("optimalDuration", name)) return 5;
   22352           0 :         if (!strcmp("active", name)) return 6;
   22353           0 :         if (!strcmp("speed", name)) return 7;
   22354           0 :         if (!strcmp("scalability", name)) return 8;
   22355           0 :         if (!strcmp("stretchMode", name)) return 9;
   22356           0 :         if (!strcmp("shrinkMode", name)) return 10;
   22357           0 :         if (!strcmp("maxDelay", name)) return 11;
   22358           0 :         if (!strcmp("actualDuration", name)) return 12;
   22359           0 :         return -1;
   22360           0 : }
   22361             : static Bool TemporalTransform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22362             : {
   22363           0 :         switch (FieldIndex) {
   22364             :         case 7:
   22365           0 :                 *AType = 7;
   22366           0 :                 *QType = 0;
   22367           0 :                 *b_min = FIX_MIN;
   22368           0 :                 *b_max = FIX_MAX;
   22369           0 :                 return 1;
   22370             :         case 8:
   22371           0 :                 *AType = 12;
   22372           0 :                 *QType = 12;
   22373           0 :                 *b_min = FLT2FIX(-1);
   22374           0 :                 *b_max = FIX_MAX;
   22375           0 :                 return 1;
   22376             :         case 9:
   22377           0 :                 *AType = 0;
   22378           0 :                 *QType = 13;
   22379           0 :                 *QT13_bits = 2;
   22380           0 :                 *b_min = FLT2FIX(0);
   22381           0 :                 *b_max = FLT2FIX(2);
   22382           0 :                 return 1;
   22383             :         case 10:
   22384           0 :                 *AType = 0;
   22385           0 :                 *QType = 13;
   22386           0 :                 *QT13_bits = 1;
   22387           0 :                 *b_min = FLT2FIX(0);
   22388           0 :                 *b_max = FLT2FIX(1);
   22389           0 :                 return 1;
   22390             :         default:
   22391           0 :                 return 0;
   22392             :         }
   22393           0 : }
   22394             : 
   22395             : 
   22396             : 
   22397             : GF_Node *TemporalTransform_Create()
   22398             : {
   22399             :         M_TemporalTransform *p;
   22400           0 :         GF_SAFEALLOC(p, M_TemporalTransform);
   22401           0 :         if(!p) return NULL;
   22402           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TemporalTransform);
   22403           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   22404             : 
   22405             :         /*default field values*/
   22406           0 :         p->startTime = -1.0;
   22407           0 :         p->optimalDuration = -1.0;
   22408           0 :         p->speed = FLT2FIX(1.0);
   22409           0 :         p->scalability.x = FLT2FIX(1.0);
   22410           0 :         p->scalability.y = FLT2FIX(1.0);
   22411           0 :         p->stretchMode.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   22412           0 :         p->stretchMode.count = 1;
   22413           0 :         p->stretchMode.vals[0] = 0;
   22414           0 :         p->shrinkMode.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   22415           0 :         p->shrinkMode.count = 1;
   22416           0 :         p->shrinkMode.vals[0] = 0;
   22417           0 :         p->maxDelay = 0;
   22418           0 :         return (GF_Node *)p;
   22419           0 : }
   22420             : 
   22421             : 
   22422             : /*
   22423             :         TemporalGroup Node deletion
   22424             : */
   22425             : 
   22426             : static void TemporalGroup_Del(GF_Node *node)
   22427             : {
   22428           0 :         M_TemporalGroup *p = (M_TemporalGroup *) node;
   22429           0 :         gf_sg_mffloat_del(p->priority);
   22430           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   22431           0 :         gf_node_free((GF_Node *) p);
   22432           0 : }
   22433             : 
   22434             : static const u16 TemporalGroup_Def2All[] = { 2, 3, 4, 5, 6};
   22435             : static const u16 TemporalGroup_In2All[] = { 0, 1, 2, 6};
   22436             : static const u16 TemporalGroup_Out2All[] = { 2, 6, 7, 8};
   22437             : 
   22438             : static u32 TemporalGroup_get_field_count(GF_Node *node, u8 IndexMode)
   22439             : {
   22440           0 :         switch(IndexMode) {
   22441             :         case GF_SG_FIELD_CODING_IN:
   22442           0 :                 return 4;
   22443             :         case GF_SG_FIELD_CODING_DEF:
   22444           0 :                 return 5;
   22445             :         case GF_SG_FIELD_CODING_OUT:
   22446           0 :                 return 4;
   22447             :         case GF_SG_FIELD_CODING_DYN:
   22448           0 :                 return 0;
   22449             :         default:
   22450           0 :                 return 9;
   22451             :         }
   22452           0 : }
   22453             : 
   22454             : static GF_Err TemporalGroup_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22455             : {
   22456           0 :         switch(IndexMode) {
   22457             :         case GF_SG_FIELD_CODING_IN:
   22458           0 :                 *allField = TemporalGroup_In2All[inField];
   22459           0 :                 return GF_OK;
   22460             :         case GF_SG_FIELD_CODING_DEF:
   22461           0 :                 *allField = TemporalGroup_Def2All[inField];
   22462           0 :                 return GF_OK;
   22463             :         case GF_SG_FIELD_CODING_OUT:
   22464           0 :                 *allField = TemporalGroup_Out2All[inField];
   22465           0 :                 return GF_OK;
   22466             :         default:
   22467           0 :                 return GF_BAD_PARAM;
   22468             :         }
   22469           0 : }
   22470             : static GF_Err TemporalGroup_get_field(GF_Node *node, GF_FieldInfo *info)
   22471             : {
   22472           0 :         switch (info->fieldIndex) {
   22473             :         case 0:
   22474           0 :                 info->name = "addChildren";
   22475           0 :                 info->eventType = GF_SG_EVENT_IN;
   22476           0 :                 info->on_event_in = ((M_TemporalGroup *)node)->on_addChildren;
   22477           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22478           0 :                 info->NDTtype = NDT_SFTemporalNode;
   22479           0 :                 info->far_ptr = & ((M_TemporalGroup *)node)->addChildren;
   22480           0 :                 return GF_OK;
   22481             :         case 1:
   22482           0 :                 info->name = "removeChildren";
   22483           0 :                 info->eventType = GF_SG_EVENT_IN;
   22484           0 :                 info->on_event_in = ((M_TemporalGroup *)node)->on_removeChildren;
   22485           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22486           0 :                 info->NDTtype = NDT_SFTemporalNode;
   22487           0 :                 info->far_ptr = & ((M_TemporalGroup *)node)->removeChildren;
   22488           0 :                 return GF_OK;
   22489             :         case 2:
   22490           0 :                 info->name = "children";
   22491           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22492           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22493           0 :                 info->NDTtype = NDT_SFTemporalNode;
   22494           0 :                 info->far_ptr = & ((M_TemporalGroup *)node)->children;
   22495           0 :                 return GF_OK;
   22496             :         case 3:
   22497           0 :                 info->name = "costart";
   22498           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   22499           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22500           0 :                 info->far_ptr = & ((M_TemporalGroup *) node)->costart;
   22501           0 :                 return GF_OK;
   22502             :         case 4:
   22503           0 :                 info->name = "coend";
   22504           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   22505           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22506           0 :                 info->far_ptr = & ((M_TemporalGroup *) node)->coend;
   22507           0 :                 return GF_OK;
   22508             :         case 5:
   22509           0 :                 info->name = "meet";
   22510           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   22511           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22512           0 :                 info->far_ptr = & ((M_TemporalGroup *) node)->meet;
   22513           0 :                 return GF_OK;
   22514             :         case 6:
   22515           0 :                 info->name = "priority";
   22516           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22517           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   22518           0 :                 info->far_ptr = & ((M_TemporalGroup *) node)->priority;
   22519           0 :                 return GF_OK;
   22520             :         case 7:
   22521           0 :                 info->name = "isActive";
   22522           0 :                 info->eventType = GF_SG_EVENT_OUT;
   22523           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22524           0 :                 info->far_ptr = & ((M_TemporalGroup *) node)->isActive;
   22525           0 :                 return GF_OK;
   22526             :         case 8:
   22527           0 :                 info->name = "activeChild";
   22528           0 :                 info->eventType = GF_SG_EVENT_OUT;
   22529           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   22530           0 :                 info->far_ptr = & ((M_TemporalGroup *) node)->activeChild;
   22531           0 :                 return GF_OK;
   22532             :         default:
   22533           0 :                 return GF_BAD_PARAM;
   22534             :         }
   22535           0 : }
   22536             : 
   22537             : 
   22538             : static s32 TemporalGroup_get_field_index_by_name(char *name)
   22539             : {
   22540           0 :         if (!strcmp("addChildren", name)) return 0;
   22541           0 :         if (!strcmp("removeChildren", name)) return 1;
   22542           0 :         if (!strcmp("children", name)) return 2;
   22543           0 :         if (!strcmp("costart", name)) return 3;
   22544           0 :         if (!strcmp("coend", name)) return 4;
   22545           0 :         if (!strcmp("meet", name)) return 5;
   22546           0 :         if (!strcmp("priority", name)) return 6;
   22547           0 :         if (!strcmp("isActive", name)) return 7;
   22548           0 :         if (!strcmp("activeChild", name)) return 8;
   22549           0 :         return -1;
   22550           0 : }
   22551             : static Bool TemporalGroup_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22552             : {
   22553           0 :         switch (FieldIndex) {
   22554             :         case 6:
   22555           0 :                 *AType = 0;
   22556           0 :                 *QType = 3;
   22557           0 :                 *b_min = FLT2FIX(0);
   22558           0 :                 *b_max = FIX_MAX;
   22559           0 :                 return 1;
   22560             :         default:
   22561           0 :                 return 0;
   22562             :         }
   22563           0 : }
   22564             : 
   22565             : 
   22566             : 
   22567             : GF_Node *TemporalGroup_Create()
   22568             : {
   22569             :         M_TemporalGroup *p;
   22570           0 :         GF_SAFEALLOC(p, M_TemporalGroup);
   22571           0 :         if(!p) return NULL;
   22572           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TemporalGroup);
   22573           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   22574             : 
   22575             :         /*default field values*/
   22576           0 :         p->costart = 1;
   22577           0 :         return (GF_Node *)p;
   22578           0 : }
   22579             : 
   22580             : 
   22581             : /*
   22582             :         ServerCommand Node deletion
   22583             : */
   22584             : 
   22585             : static void ServerCommand_Del(GF_Node *node)
   22586             : {
   22587           0 :         M_ServerCommand *p = (M_ServerCommand *) node;
   22588           0 :         gf_sg_mfurl_del(p->url);
   22589           0 :         gf_sg_sfstring_del(p->command);
   22590           0 :         gf_node_free((GF_Node *) p);
   22591           0 : }
   22592             : 
   22593             : static const u16 ServerCommand_Def2All[] = { 1, 2, 3};
   22594             : static const u16 ServerCommand_In2All[] = { 0, 1, 2, 3};
   22595             : static const u16 ServerCommand_Out2All[] = { 1, 2, 3};
   22596             : 
   22597             : static u32 ServerCommand_get_field_count(GF_Node *node, u8 IndexMode)
   22598             : {
   22599           0 :         switch(IndexMode) {
   22600             :         case GF_SG_FIELD_CODING_IN:
   22601           0 :                 return 4;
   22602             :         case GF_SG_FIELD_CODING_DEF:
   22603           0 :                 return 3;
   22604             :         case GF_SG_FIELD_CODING_OUT:
   22605           0 :                 return 3;
   22606             :         case GF_SG_FIELD_CODING_DYN:
   22607           0 :                 return 0;
   22608             :         default:
   22609           0 :                 return 4;
   22610             :         }
   22611           0 : }
   22612             : 
   22613             : static GF_Err ServerCommand_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22614             : {
   22615           0 :         switch(IndexMode) {
   22616             :         case GF_SG_FIELD_CODING_IN:
   22617           0 :                 *allField = ServerCommand_In2All[inField];
   22618           0 :                 return GF_OK;
   22619             :         case GF_SG_FIELD_CODING_DEF:
   22620           0 :                 *allField = ServerCommand_Def2All[inField];
   22621           0 :                 return GF_OK;
   22622             :         case GF_SG_FIELD_CODING_OUT:
   22623           0 :                 *allField = ServerCommand_Out2All[inField];
   22624           0 :                 return GF_OK;
   22625             :         default:
   22626           0 :                 return GF_BAD_PARAM;
   22627             :         }
   22628           0 : }
   22629             : static GF_Err ServerCommand_get_field(GF_Node *node, GF_FieldInfo *info)
   22630             : {
   22631           0 :         switch (info->fieldIndex) {
   22632             :         case 0:
   22633           0 :                 info->name = "trigger";
   22634           0 :                 info->eventType = GF_SG_EVENT_IN;
   22635           0 :                 info->on_event_in = ((M_ServerCommand *)node)->on_trigger;
   22636           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22637           0 :                 info->far_ptr = & ((M_ServerCommand *) node)->trigger;
   22638           0 :                 return GF_OK;
   22639             :         case 1:
   22640           0 :                 info->name = "enable";
   22641           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22642           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22643           0 :                 info->far_ptr = & ((M_ServerCommand *) node)->enable;
   22644           0 :                 return GF_OK;
   22645             :         case 2:
   22646           0 :                 info->name = "url";
   22647           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22648           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   22649           0 :                 info->far_ptr = & ((M_ServerCommand *) node)->url;
   22650           0 :                 return GF_OK;
   22651             :         case 3:
   22652           0 :                 info->name = "command";
   22653           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22654           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   22655           0 :                 info->far_ptr = & ((M_ServerCommand *) node)->command;
   22656           0 :                 return GF_OK;
   22657             :         default:
   22658           0 :                 return GF_BAD_PARAM;
   22659             :         }
   22660           0 : }
   22661             : 
   22662             : 
   22663             : static s32 ServerCommand_get_field_index_by_name(char *name)
   22664             : {
   22665           0 :         if (!strcmp("trigger", name)) return 0;
   22666           0 :         if (!strcmp("enable", name)) return 1;
   22667           0 :         if (!strcmp("url", name)) return 2;
   22668           0 :         if (!strcmp("command", name)) return 3;
   22669           0 :         return -1;
   22670           0 : }
   22671             : static Bool ServerCommand_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22672             : {
   22673             :         switch (FieldIndex) {
   22674             :         default:
   22675           0 :                 return 0;
   22676             :         }
   22677             : }
   22678             : 
   22679             : 
   22680             : 
   22681             : GF_Node *ServerCommand_Create()
   22682             : {
   22683             :         M_ServerCommand *p;
   22684           0 :         GF_SAFEALLOC(p, M_ServerCommand);
   22685           0 :         if(!p) return NULL;
   22686           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ServerCommand);
   22687             : 
   22688             :         /*default field values*/
   22689           0 :         return (GF_Node *)p;
   22690           0 : }
   22691             : 
   22692             : 
   22693             : /*
   22694             :         InputSensor Node deletion
   22695             : */
   22696             : 
   22697             : static void InputSensor_Del(GF_Node *node)
   22698             : {
   22699         108 :         M_InputSensor *p = (M_InputSensor *) node;
   22700          54 :         gf_sg_sfcommand_del(p->buffer);
   22701          54 :         gf_sg_mfurl_del(p->url);
   22702          54 :         gf_node_free((GF_Node *) p);
   22703          54 : }
   22704             : 
   22705             : static const u16 InputSensor_Def2All[] = { 0, 1, 2};
   22706             : static const u16 InputSensor_In2All[] = { 0, 1, 2};
   22707             : static const u16 InputSensor_Out2All[] = { 0, 1, 2, 3};
   22708             : 
   22709             : static u32 InputSensor_get_field_count(GF_Node *node, u8 IndexMode)
   22710             : {
   22711          96 :         switch(IndexMode) {
   22712             :         case GF_SG_FIELD_CODING_IN:
   22713           0 :                 return 3;
   22714             :         case GF_SG_FIELD_CODING_DEF:
   22715          27 :                 return 3;
   22716             :         case GF_SG_FIELD_CODING_OUT:
   22717           0 :                 return 4;
   22718             :         case GF_SG_FIELD_CODING_DYN:
   22719           0 :                 return 0;
   22720             :         default:
   22721          21 :                 return 4;
   22722             :         }
   22723          48 : }
   22724             : 
   22725             : static GF_Err InputSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22726             : {
   22727          96 :         switch(IndexMode) {
   22728             :         case GF_SG_FIELD_CODING_IN:
   22729           0 :                 *allField = InputSensor_In2All[inField];
   22730           0 :                 return GF_OK;
   22731             :         case GF_SG_FIELD_CODING_DEF:
   22732          48 :                 *allField = InputSensor_Def2All[inField];
   22733          48 :                 return GF_OK;
   22734             :         case GF_SG_FIELD_CODING_OUT:
   22735           0 :                 *allField = InputSensor_Out2All[inField];
   22736           0 :                 return GF_OK;
   22737             :         default:
   22738           0 :                 return GF_BAD_PARAM;
   22739             :         }
   22740          48 : }
   22741             : static GF_Err InputSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   22742             : {
   22743         510 :         switch (info->fieldIndex) {
   22744             :         case 0:
   22745          54 :                 info->name = "enabled";
   22746          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22747          54 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22748          54 :                 info->far_ptr = & ((M_InputSensor *) node)->enabled;
   22749          54 :                 return GF_OK;
   22750             :         case 1:
   22751          81 :                 info->name = "buffer";
   22752          81 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22753          81 :                 info->fieldType = GF_SG_VRML_SFCOMMANDBUFFER;
   22754          81 :                 info->far_ptr = & ((M_InputSensor *) node)->buffer;
   22755          81 :                 return GF_OK;
   22756             :         case 2:
   22757          99 :                 info->name = "url";
   22758          99 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22759          99 :                 info->fieldType = GF_SG_VRML_MFURL;
   22760          99 :                 info->far_ptr = & ((M_InputSensor *) node)->url;
   22761          99 :                 return GF_OK;
   22762             :         case 3:
   22763          21 :                 info->name = "eventTime";
   22764          21 :                 info->eventType = GF_SG_EVENT_OUT;
   22765          21 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22766          21 :                 info->far_ptr = & ((M_InputSensor *) node)->eventTime;
   22767          21 :                 return GF_OK;
   22768             :         default:
   22769           0 :                 return GF_BAD_PARAM;
   22770             :         }
   22771         255 : }
   22772             : 
   22773             : 
   22774             : static s32 InputSensor_get_field_index_by_name(char *name)
   22775             : {
   22776          48 :         if (!strcmp("enabled", name)) return 0;
   22777          36 :         if (!strcmp("buffer", name)) return 1;
   22778          24 :         if (!strcmp("url", name)) return 2;
   22779           0 :         if (!strcmp("eventTime", name)) return 3;
   22780           0 :         return -1;
   22781          24 : }
   22782             : static Bool InputSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22783             : {
   22784             :         switch (FieldIndex) {
   22785             :         default:
   22786           0 :                 return 0;
   22787             :         }
   22788             : }
   22789             : 
   22790             : 
   22791             : 
   22792             : GF_Node *InputSensor_Create()
   22793             : {
   22794             :         M_InputSensor *p;
   22795         162 :         GF_SAFEALLOC(p, M_InputSensor);
   22796          54 :         if(!p) return NULL;
   22797          54 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_InputSensor);
   22798          54 :         p->buffer.commandList = gf_list_new();
   22799             : 
   22800             :         /*default field values*/
   22801          54 :         p->enabled = 1;
   22802          54 :         return (GF_Node *)p;
   22803          54 : }
   22804             : 
   22805             : 
   22806             : /*
   22807             :         MatteTexture Node deletion
   22808             : */
   22809             : 
   22810             : static void MatteTexture_Del(GF_Node *node)
   22811             : {
   22812           0 :         M_MatteTexture *p = (M_MatteTexture *) node;
   22813           0 :         gf_node_unregister((GF_Node *) p->surfaceA, (GF_Node *) p);
   22814           0 :         gf_node_unregister((GF_Node *) p->surfaceB, (GF_Node *) p);
   22815           0 :         gf_node_unregister((GF_Node *) p->alphaSurface, (GF_Node *) p);
   22816           0 :         gf_sg_sfstring_del(p->operation);
   22817           0 :         gf_sg_mffloat_del(p->parameter);
   22818           0 :         gf_node_free((GF_Node *) p);
   22819           0 : }
   22820             : 
   22821             : static const u16 MatteTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   22822             : static const u16 MatteTexture_In2All[] = { 3, 5, 6};
   22823             : static const u16 MatteTexture_Out2All[] = { 3, 5, 6};
   22824             : 
   22825             : static u32 MatteTexture_get_field_count(GF_Node *node, u8 IndexMode)
   22826             : {
   22827           0 :         switch(IndexMode) {
   22828             :         case GF_SG_FIELD_CODING_IN:
   22829           0 :                 return 3;
   22830             :         case GF_SG_FIELD_CODING_DEF:
   22831           0 :                 return 7;
   22832             :         case GF_SG_FIELD_CODING_OUT:
   22833           0 :                 return 3;
   22834             :         case GF_SG_FIELD_CODING_DYN:
   22835           0 :                 return 0;
   22836             :         default:
   22837           0 :                 return 7;
   22838             :         }
   22839           0 : }
   22840             : 
   22841             : static GF_Err MatteTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22842             : {
   22843           0 :         switch(IndexMode) {
   22844             :         case GF_SG_FIELD_CODING_IN:
   22845           0 :                 *allField = MatteTexture_In2All[inField];
   22846           0 :                 return GF_OK;
   22847             :         case GF_SG_FIELD_CODING_DEF:
   22848           0 :                 *allField = MatteTexture_Def2All[inField];
   22849           0 :                 return GF_OK;
   22850             :         case GF_SG_FIELD_CODING_OUT:
   22851           0 :                 *allField = MatteTexture_Out2All[inField];
   22852           0 :                 return GF_OK;
   22853             :         default:
   22854           0 :                 return GF_BAD_PARAM;
   22855             :         }
   22856           0 : }
   22857             : static GF_Err MatteTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   22858             : {
   22859           0 :         switch (info->fieldIndex) {
   22860             :         case 0:
   22861           0 :                 info->name = "surfaceA";
   22862           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   22863           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   22864           0 :                 info->NDTtype = NDT_SFTextureNode;
   22865           0 :                 info->far_ptr = & ((M_MatteTexture *)node)->surfaceA;
   22866           0 :                 return GF_OK;
   22867             :         case 1:
   22868           0 :                 info->name = "surfaceB";
   22869           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   22870           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   22871           0 :                 info->NDTtype = NDT_SFTextureNode;
   22872           0 :                 info->far_ptr = & ((M_MatteTexture *)node)->surfaceB;
   22873           0 :                 return GF_OK;
   22874             :         case 2:
   22875           0 :                 info->name = "alphaSurface";
   22876           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   22877           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   22878           0 :                 info->NDTtype = NDT_SFTextureNode;
   22879           0 :                 info->far_ptr = & ((M_MatteTexture *)node)->alphaSurface;
   22880           0 :                 return GF_OK;
   22881             :         case 3:
   22882           0 :                 info->name = "operation";
   22883           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22884           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   22885           0 :                 info->far_ptr = & ((M_MatteTexture *) node)->operation;
   22886           0 :                 return GF_OK;
   22887             :         case 4:
   22888           0 :                 info->name = "overwrite";
   22889           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   22890           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22891           0 :                 info->far_ptr = & ((M_MatteTexture *) node)->overwrite;
   22892           0 :                 return GF_OK;
   22893             :         case 5:
   22894           0 :                 info->name = "fraction";
   22895           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22896           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   22897           0 :                 info->far_ptr = & ((M_MatteTexture *) node)->fraction;
   22898           0 :                 return GF_OK;
   22899             :         case 6:
   22900           0 :                 info->name = "parameter";
   22901           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22902           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   22903           0 :                 info->far_ptr = & ((M_MatteTexture *) node)->parameter;
   22904           0 :                 return GF_OK;
   22905             :         default:
   22906           0 :                 return GF_BAD_PARAM;
   22907             :         }
   22908           0 : }
   22909             : 
   22910             : 
   22911             : static s32 MatteTexture_get_field_index_by_name(char *name)
   22912             : {
   22913           0 :         if (!strcmp("surfaceA", name)) return 0;
   22914           0 :         if (!strcmp("surfaceB", name)) return 1;
   22915           0 :         if (!strcmp("alphaSurface", name)) return 2;
   22916           0 :         if (!strcmp("operation", name)) return 3;
   22917           0 :         if (!strcmp("overwrite", name)) return 4;
   22918           0 :         if (!strcmp("fraction", name)) return 5;
   22919           0 :         if (!strcmp("parameter", name)) return 6;
   22920           0 :         return -1;
   22921           0 : }
   22922             : static Bool MatteTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22923             : {
   22924             :         switch (FieldIndex) {
   22925             :         default:
   22926           0 :                 return 0;
   22927             :         }
   22928             : }
   22929             : 
   22930             : 
   22931             : 
   22932             : GF_Node *MatteTexture_Create()
   22933             : {
   22934             :         M_MatteTexture *p;
   22935           0 :         GF_SAFEALLOC(p, M_MatteTexture);
   22936           0 :         if(!p) return NULL;
   22937           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MatteTexture);
   22938             : 
   22939             :         /*default field values*/
   22940           0 :         p->fraction = FLT2FIX(0);
   22941           0 :         p->parameter.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   22942           0 :         p->parameter.count = 1;
   22943           0 :         p->parameter.vals[0] = FLT2FIX(0);
   22944           0 :         return (GF_Node *)p;
   22945           0 : }
   22946             : 
   22947             : 
   22948             : /*
   22949             :         MediaBuffer Node deletion
   22950             : */
   22951             : 
   22952             : static void MediaBuffer_Del(GF_Node *node)
   22953             : {
   22954           0 :         M_MediaBuffer *p = (M_MediaBuffer *) node;
   22955           0 :         gf_sg_mfurl_del(p->url);
   22956           0 :         gf_node_free((GF_Node *) p);
   22957           0 : }
   22958             : 
   22959             : static const u16 MediaBuffer_Def2All[] = { 0, 1, 2, 3, 5};
   22960             : static const u16 MediaBuffer_In2All[] = { 0, 1, 2, 3, 5};
   22961             : static const u16 MediaBuffer_Out2All[] = { 0, 1, 2, 3, 4, 5};
   22962             : 
   22963             : static u32 MediaBuffer_get_field_count(GF_Node *node, u8 IndexMode)
   22964             : {
   22965           0 :         switch(IndexMode) {
   22966             :         case GF_SG_FIELD_CODING_IN:
   22967           0 :                 return 5;
   22968             :         case GF_SG_FIELD_CODING_DEF:
   22969           0 :                 return 5;
   22970             :         case GF_SG_FIELD_CODING_OUT:
   22971           0 :                 return 6;
   22972             :         case GF_SG_FIELD_CODING_DYN:
   22973           0 :                 return 0;
   22974             :         default:
   22975           0 :                 return 6;
   22976             :         }
   22977           0 : }
   22978             : 
   22979             : static GF_Err MediaBuffer_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22980             : {
   22981           0 :         switch(IndexMode) {
   22982             :         case GF_SG_FIELD_CODING_IN:
   22983           0 :                 *allField = MediaBuffer_In2All[inField];
   22984           0 :                 return GF_OK;
   22985             :         case GF_SG_FIELD_CODING_DEF:
   22986           0 :                 *allField = MediaBuffer_Def2All[inField];
   22987           0 :                 return GF_OK;
   22988             :         case GF_SG_FIELD_CODING_OUT:
   22989           0 :                 *allField = MediaBuffer_Out2All[inField];
   22990           0 :                 return GF_OK;
   22991             :         default:
   22992           0 :                 return GF_BAD_PARAM;
   22993             :         }
   22994           0 : }
   22995             : static GF_Err MediaBuffer_get_field(GF_Node *node, GF_FieldInfo *info)
   22996             : {
   22997           0 :         switch (info->fieldIndex) {
   22998             :         case 0:
   22999           0 :                 info->name = "bufferSize";
   23000           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23001           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23002           0 :                 info->far_ptr = & ((M_MediaBuffer *) node)->bufferSize;
   23003           0 :                 return GF_OK;
   23004             :         case 1:
   23005           0 :                 info->name = "url";
   23006           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23007           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   23008           0 :                 info->far_ptr = & ((M_MediaBuffer *) node)->url;
   23009           0 :                 return GF_OK;
   23010             :         case 2:
   23011           0 :                 info->name = "mediaStartTime";
   23012           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23013           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23014           0 :                 info->far_ptr = & ((M_MediaBuffer *) node)->mediaStartTime;
   23015           0 :                 return GF_OK;
   23016             :         case 3:
   23017           0 :                 info->name = "mediaStopTime";
   23018           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23019           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23020           0 :                 info->far_ptr = & ((M_MediaBuffer *) node)->mediaStopTime;
   23021           0 :                 return GF_OK;
   23022             :         case 4:
   23023           0 :                 info->name = "isBuffered";
   23024           0 :                 info->eventType = GF_SG_EVENT_OUT;
   23025           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23026           0 :                 info->far_ptr = & ((M_MediaBuffer *) node)->isBuffered;
   23027           0 :                 return GF_OK;
   23028             :         case 5:
   23029           0 :                 info->name = "enabled";
   23030           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23031           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23032           0 :                 info->far_ptr = & ((M_MediaBuffer *) node)->enabled;
   23033           0 :                 return GF_OK;
   23034             :         default:
   23035           0 :                 return GF_BAD_PARAM;
   23036             :         }
   23037           0 : }
   23038             : 
   23039             : 
   23040             : static s32 MediaBuffer_get_field_index_by_name(char *name)
   23041             : {
   23042           0 :         if (!strcmp("bufferSize", name)) return 0;
   23043           0 :         if (!strcmp("url", name)) return 1;
   23044           0 :         if (!strcmp("mediaStartTime", name)) return 2;
   23045           0 :         if (!strcmp("mediaStopTime", name)) return 3;
   23046           0 :         if (!strcmp("isBuffered", name)) return 4;
   23047           0 :         if (!strcmp("enabled", name)) return 5;
   23048           0 :         return -1;
   23049           0 : }
   23050             : static Bool MediaBuffer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23051             : {
   23052             :         switch (FieldIndex) {
   23053             :         default:
   23054           0 :                 return 0;
   23055             :         }
   23056             : }
   23057             : 
   23058             : 
   23059             : 
   23060             : GF_Node *MediaBuffer_Create()
   23061             : {
   23062             :         M_MediaBuffer *p;
   23063           0 :         GF_SAFEALLOC(p, M_MediaBuffer);
   23064           0 :         if(!p) return NULL;
   23065           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MediaBuffer);
   23066             : 
   23067             :         /*default field values*/
   23068           0 :         p->bufferSize = FLT2FIX(0.0);
   23069           0 :         p->mediaStartTime = -1;
   23070           0 :         p->mediaStopTime = FIX_MAX;
   23071           0 :         p->enabled = 1;
   23072           0 :         return (GF_Node *)p;
   23073           0 : }
   23074             : 
   23075             : 
   23076             : /*
   23077             :         MediaControl Node deletion
   23078             : */
   23079             : 
   23080             : static void MediaControl_Del(GF_Node *node)
   23081             : {
   23082         554 :         M_MediaControl *p = (M_MediaControl *) node;
   23083         277 :         gf_sg_mfurl_del(p->url);
   23084         277 :         gf_node_free((GF_Node *) p);
   23085         277 : }
   23086             : 
   23087             : static const u16 MediaControl_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   23088             : static const u16 MediaControl_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   23089             : static const u16 MediaControl_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   23090             : 
   23091             : static u32 MediaControl_get_field_count(GF_Node *node, u8 IndexMode)
   23092             : {
   23093         782 :         switch(IndexMode) {
   23094             :         case GF_SG_FIELD_CODING_IN:
   23095         144 :                 return 8;
   23096             :         case GF_SG_FIELD_CODING_DEF:
   23097         128 :                 return 8;
   23098             :         case GF_SG_FIELD_CODING_OUT:
   23099           0 :                 return 9;
   23100             :         case GF_SG_FIELD_CODING_DYN:
   23101           0 :                 return 0;
   23102             :         default:
   23103         119 :                 return 9;
   23104             :         }
   23105         391 : }
   23106             : 
   23107             : static GF_Err MediaControl_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23108             : {
   23109        1202 :         switch(IndexMode) {
   23110             :         case GF_SG_FIELD_CODING_IN:
   23111         220 :                 *allField = MediaControl_In2All[inField];
   23112         220 :                 return GF_OK;
   23113             :         case GF_SG_FIELD_CODING_DEF:
   23114         381 :                 *allField = MediaControl_Def2All[inField];
   23115         381 :                 return GF_OK;
   23116             :         case GF_SG_FIELD_CODING_OUT:
   23117           0 :                 *allField = MediaControl_Out2All[inField];
   23118           0 :                 return GF_OK;
   23119             :         default:
   23120           0 :                 return GF_BAD_PARAM;
   23121             :         }
   23122         601 : }
   23123             : static GF_Err MediaControl_get_field(GF_Node *node, GF_FieldInfo *info)
   23124             : {
   23125        6154 :         switch (info->fieldIndex) {
   23126             :         case 0:
   23127         519 :                 info->name = "url";
   23128         519 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23129         519 :                 info->fieldType = GF_SG_VRML_MFURL;
   23130         519 :                 info->far_ptr = & ((M_MediaControl *) node)->url;
   23131         519 :                 return GF_OK;
   23132             :         case 1:
   23133         293 :                 info->name = "mediaStartTime";
   23134         293 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23135         293 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23136         293 :                 info->far_ptr = & ((M_MediaControl *) node)->mediaStartTime;
   23137         293 :                 return GF_OK;
   23138             :         case 2:
   23139         305 :                 info->name = "mediaStopTime";
   23140         305 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23141         305 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23142         305 :                 info->far_ptr = & ((M_MediaControl *) node)->mediaStopTime;
   23143         305 :                 return GF_OK;
   23144             :         case 3:
   23145         436 :                 info->name = "mediaSpeed";
   23146         436 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23147         436 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23148         436 :                 info->far_ptr = & ((M_MediaControl *) node)->mediaSpeed;
   23149         436 :                 return GF_OK;
   23150             :         case 4:
   23151         398 :                 info->name = "loop";
   23152         398 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23153         398 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23154         398 :                 info->far_ptr = & ((M_MediaControl *) node)->loop;
   23155         398 :                 return GF_OK;
   23156             :         case 5:
   23157         398 :                 info->name = "preRoll";
   23158         398 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23159         398 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23160         398 :                 info->far_ptr = & ((M_MediaControl *) node)->preRoll;
   23161         398 :                 return GF_OK;
   23162             :         case 6:
   23163         338 :                 info->name = "mute";
   23164         338 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23165         338 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23166         338 :                 info->far_ptr = & ((M_MediaControl *) node)->mute;
   23167         338 :                 return GF_OK;
   23168             :         case 7:
   23169         278 :                 info->name = "enabled";
   23170         278 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23171         278 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23172         278 :                 info->far_ptr = & ((M_MediaControl *) node)->enabled;
   23173         278 :                 return GF_OK;
   23174             :         case 8:
   23175         112 :                 info->name = "isPreRolled";
   23176         112 :                 info->eventType = GF_SG_EVENT_OUT;
   23177         112 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23178         112 :                 info->far_ptr = & ((M_MediaControl *) node)->isPreRolled;
   23179         112 :                 return GF_OK;
   23180             :         default:
   23181           0 :                 return GF_BAD_PARAM;
   23182             :         }
   23183        3077 : }
   23184             : 
   23185             : 
   23186             : static s32 MediaControl_get_field_index_by_name(char *name)
   23187             : {
   23188         491 :         if (!strcmp("url", name)) return 0;
   23189         152 :         if (!strcmp("mediaStartTime", name)) return 1;
   23190         160 :         if (!strcmp("mediaStopTime", name)) return 2;
   23191         176 :         if (!strcmp("mediaSpeed", name)) return 3;
   23192         112 :         if (!strcmp("loop", name)) return 4;
   23193          80 :         if (!strcmp("preRoll", name)) return 5;
   23194          32 :         if (!strcmp("mute", name)) return 6;
   23195           0 :         if (!strcmp("enabled", name)) return 7;
   23196           0 :         if (!strcmp("isPreRolled", name)) return 8;
   23197           0 :         return -1;
   23198         213 : }
   23199             : static Bool MediaControl_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23200             : {
   23201             :         switch (FieldIndex) {
   23202             :         default:
   23203           0 :                 return 0;
   23204             :         }
   23205             : }
   23206             : 
   23207             : 
   23208             : 
   23209             : GF_Node *MediaControl_Create()
   23210             : {
   23211             :         M_MediaControl *p;
   23212         831 :         GF_SAFEALLOC(p, M_MediaControl);
   23213         277 :         if(!p) return NULL;
   23214         277 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MediaControl);
   23215             : 
   23216             :         /*default field values*/
   23217         277 :         p->mediaStartTime = -1;
   23218         277 :         p->mediaStopTime = FIX_MAX;
   23219         277 :         p->mediaSpeed = FLT2FIX(1.0);
   23220         277 :         p->preRoll = 1;
   23221         277 :         p->enabled = 1;
   23222         277 :         return (GF_Node *)p;
   23223         277 : }
   23224             : 
   23225             : 
   23226             : /*
   23227             :         MediaSensor Node deletion
   23228             : */
   23229             : 
   23230             : static void MediaSensor_Del(GF_Node *node)
   23231             : {
   23232         480 :         M_MediaSensor *p = (M_MediaSensor *) node;
   23233         240 :         gf_sg_mfurl_del(p->url);
   23234         240 :         gf_sg_mfstring_del(p->info);
   23235         240 :         gf_node_free((GF_Node *) p);
   23236         240 : }
   23237             : 
   23238             : static const u16 MediaSensor_Def2All[] = { 0};
   23239             : static const u16 MediaSensor_In2All[] = { 0};
   23240             : static const u16 MediaSensor_Out2All[] = { 0, 1, 2, 3, 4, 5};
   23241             : 
   23242             : static u32 MediaSensor_get_field_count(GF_Node *node, u8 IndexMode)
   23243             : {
   23244         908 :         switch(IndexMode) {
   23245             :         case GF_SG_FIELD_CODING_IN:
   23246           0 :                 return 1;
   23247             :         case GF_SG_FIELD_CODING_DEF:
   23248         117 :                 return 1;
   23249             :         case GF_SG_FIELD_CODING_OUT:
   23250         243 :                 return 6;
   23251             :         case GF_SG_FIELD_CODING_DYN:
   23252           0 :                 return 0;
   23253             :         default:
   23254          94 :                 return 6;
   23255             :         }
   23256         454 : }
   23257             : 
   23258             : static GF_Err MediaSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23259             : {
   23260         828 :         switch(IndexMode) {
   23261             :         case GF_SG_FIELD_CODING_IN:
   23262           0 :                 *allField = MediaSensor_In2All[inField];
   23263           0 :                 return GF_OK;
   23264             :         case GF_SG_FIELD_CODING_DEF:
   23265          91 :                 *allField = MediaSensor_Def2All[inField];
   23266          91 :                 return GF_OK;
   23267             :         case GF_SG_FIELD_CODING_OUT:
   23268         323 :                 *allField = MediaSensor_Out2All[inField];
   23269         323 :                 return GF_OK;
   23270             :         default:
   23271           0 :                 return GF_BAD_PARAM;
   23272             :         }
   23273         414 : }
   23274             : static GF_Err MediaSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   23275             : {
   23276        2254 :         switch (info->fieldIndex) {
   23277             :         case 0:
   23278         435 :                 info->name = "url";
   23279         435 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23280         435 :                 info->fieldType = GF_SG_VRML_MFURL;
   23281         435 :                 info->far_ptr = & ((M_MediaSensor *) node)->url;
   23282         435 :                 return GF_OK;
   23283             :         case 1:
   23284         176 :                 info->name = "mediaCurrentTime";
   23285         176 :                 info->eventType = GF_SG_EVENT_OUT;
   23286         176 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23287         176 :                 info->far_ptr = & ((M_MediaSensor *) node)->mediaCurrentTime;
   23288         176 :                 return GF_OK;
   23289             :         case 2:
   23290         110 :                 info->name = "streamObjectStartTime";
   23291         110 :                 info->eventType = GF_SG_EVENT_OUT;
   23292         110 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23293         110 :                 info->far_ptr = & ((M_MediaSensor *) node)->streamObjectStartTime;
   23294         110 :                 return GF_OK;
   23295             :         case 3:
   23296         168 :                 info->name = "mediaDuration";
   23297         168 :                 info->eventType = GF_SG_EVENT_OUT;
   23298         168 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23299         168 :                 info->far_ptr = & ((M_MediaSensor *) node)->mediaDuration;
   23300         168 :                 return GF_OK;
   23301             :         case 4:
   23302         128 :                 info->name = "isActive";
   23303         128 :                 info->eventType = GF_SG_EVENT_OUT;
   23304         128 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23305         128 :                 info->far_ptr = & ((M_MediaSensor *) node)->isActive;
   23306         128 :                 return GF_OK;
   23307             :         case 5:
   23308         110 :                 info->name = "info";
   23309         110 :                 info->eventType = GF_SG_EVENT_OUT;
   23310         110 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   23311         110 :                 info->far_ptr = & ((M_MediaSensor *) node)->info;
   23312         110 :                 return GF_OK;
   23313             :         default:
   23314           0 :                 return GF_BAD_PARAM;
   23315             :         }
   23316        1127 : }
   23317             : 
   23318             : 
   23319             : static s32 MediaSensor_get_field_index_by_name(char *name)
   23320             : {
   23321         378 :         if (!strcmp("url", name)) return 0;
   23322         152 :         if (!strcmp("mediaCurrentTime", name)) return 1;
   23323          78 :         if (!strcmp("streamObjectStartTime", name)) return 2;
   23324          99 :         if (!strcmp("mediaDuration", name)) return 3;
   23325          42 :         if (!strcmp("isActive", name)) return 4;
   23326          16 :         if (!strcmp("info", name)) return 5;
   23327           0 :         return -1;
   23328         163 : }
   23329             : static Bool MediaSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23330             : {
   23331             :         switch (FieldIndex) {
   23332             :         default:
   23333           0 :                 return 0;
   23334             :         }
   23335             : }
   23336             : 
   23337             : 
   23338             : 
   23339             : GF_Node *MediaSensor_Create()
   23340             : {
   23341             :         M_MediaSensor *p;
   23342         720 :         GF_SAFEALLOC(p, M_MediaSensor);
   23343         240 :         if(!p) return NULL;
   23344         240 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MediaSensor);
   23345             : 
   23346             :         /*default field values*/
   23347         240 :         return (GF_Node *)p;
   23348         240 : }
   23349             : 
   23350             : 
   23351             : /*
   23352             :         BitWrapper Node deletion
   23353             : */
   23354             : 
   23355             : static void BitWrapper_Del(GF_Node *node)
   23356             : {
   23357           0 :         M_BitWrapper *p = (M_BitWrapper *) node;
   23358           0 :         gf_node_unregister((GF_Node *) p->node, (GF_Node *) p);
   23359           0 :         gf_sg_mfurl_del(p->url);
   23360           0 :         gf_sg_sfstring_del(p->buffer);
   23361           0 :         gf_node_free((GF_Node *) p);
   23362           0 : }
   23363             : 
   23364             : static const u16 BitWrapper_Def2All[] = { 0, 1, 2, 3};
   23365             : 
   23366             : static u32 BitWrapper_get_field_count(GF_Node *node, u8 IndexMode)
   23367             : {
   23368           0 :         switch(IndexMode) {
   23369             :         case GF_SG_FIELD_CODING_IN:
   23370           0 :                 return 0;
   23371             :         case GF_SG_FIELD_CODING_DEF:
   23372           0 :                 return 4;
   23373             :         case GF_SG_FIELD_CODING_OUT:
   23374           0 :                 return 0;
   23375             :         case GF_SG_FIELD_CODING_DYN:
   23376           0 :                 return 0;
   23377             :         default:
   23378           0 :                 return 4;
   23379             :         }
   23380           0 : }
   23381             : 
   23382             : static GF_Err BitWrapper_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23383             : {
   23384           0 :         switch(IndexMode) {
   23385             :         case GF_SG_FIELD_CODING_DEF:
   23386           0 :                 *allField = BitWrapper_Def2All[inField];
   23387           0 :                 return GF_OK;
   23388             :         default:
   23389           0 :                 return GF_BAD_PARAM;
   23390             :         }
   23391           0 : }
   23392             : static GF_Err BitWrapper_get_field(GF_Node *node, GF_FieldInfo *info)
   23393             : {
   23394           0 :         switch (info->fieldIndex) {
   23395             :         case 0:
   23396           0 :                 info->name = "node";
   23397           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23398           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   23399           0 :                 info->NDTtype = NDT_SFWorldNode;
   23400           0 :                 info->far_ptr = & ((M_BitWrapper *)node)->node;
   23401           0 :                 return GF_OK;
   23402             :         case 1:
   23403           0 :                 info->name = "type";
   23404           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23405           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23406           0 :                 info->far_ptr = & ((M_BitWrapper *) node)->type;
   23407           0 :                 return GF_OK;
   23408             :         case 2:
   23409           0 :                 info->name = "url";
   23410           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23411           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   23412           0 :                 info->far_ptr = & ((M_BitWrapper *) node)->url;
   23413           0 :                 return GF_OK;
   23414             :         case 3:
   23415           0 :                 info->name = "buffer";
   23416           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23417           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   23418           0 :                 info->far_ptr = & ((M_BitWrapper *) node)->buffer;
   23419           0 :                 return GF_OK;
   23420             :         default:
   23421           0 :                 return GF_BAD_PARAM;
   23422             :         }
   23423           0 : }
   23424             : 
   23425             : 
   23426             : static s32 BitWrapper_get_field_index_by_name(char *name)
   23427             : {
   23428           0 :         if (!strcmp("node", name)) return 0;
   23429           0 :         if (!strcmp("type", name)) return 1;
   23430           0 :         if (!strcmp("url", name)) return 2;
   23431           0 :         if (!strcmp("buffer", name)) return 3;
   23432           0 :         return -1;
   23433           0 : }
   23434             : static Bool BitWrapper_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23435             : {
   23436             :         switch (FieldIndex) {
   23437             :         default:
   23438           0 :                 return 0;
   23439             :         }
   23440             : }
   23441             : 
   23442             : 
   23443             : 
   23444             : GF_Node *BitWrapper_Create()
   23445             : {
   23446             :         M_BitWrapper *p;
   23447           0 :         GF_SAFEALLOC(p, M_BitWrapper);
   23448           0 :         if(!p) return NULL;
   23449           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BitWrapper);
   23450             : 
   23451             :         /*default field values*/
   23452           0 :         p->type = 0;
   23453           0 :         return (GF_Node *)p;
   23454           0 : }
   23455             : 
   23456             : 
   23457             : /*
   23458             :         CoordinateInterpolator4D Node deletion
   23459             : */
   23460             : 
   23461             : static void CoordinateInterpolator4D_Del(GF_Node *node)
   23462             : {
   23463           0 :         M_CoordinateInterpolator4D *p = (M_CoordinateInterpolator4D *) node;
   23464           0 :         gf_sg_mffloat_del(p->key);
   23465           0 :         gf_sg_mfvec4f_del(p->keyValue);
   23466           0 :         gf_sg_mfvec4f_del(p->value_changed);
   23467           0 :         gf_node_free((GF_Node *) p);
   23468           0 : }
   23469             : 
   23470             : static const u16 CoordinateInterpolator4D_Def2All[] = { 1, 2};
   23471             : static const u16 CoordinateInterpolator4D_In2All[] = { 0, 1, 2};
   23472             : static const u16 CoordinateInterpolator4D_Out2All[] = { 1, 2, 3};
   23473             : 
   23474             : static u32 CoordinateInterpolator4D_get_field_count(GF_Node *node, u8 IndexMode)
   23475             : {
   23476           0 :         switch(IndexMode) {
   23477             :         case GF_SG_FIELD_CODING_IN:
   23478           0 :                 return 3;
   23479             :         case GF_SG_FIELD_CODING_DEF:
   23480           0 :                 return 2;
   23481             :         case GF_SG_FIELD_CODING_OUT:
   23482           0 :                 return 3;
   23483             :         case GF_SG_FIELD_CODING_DYN:
   23484           0 :                 return 0;
   23485             :         default:
   23486           0 :                 return 4;
   23487             :         }
   23488           0 : }
   23489             : 
   23490             : static GF_Err CoordinateInterpolator4D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23491             : {
   23492           0 :         switch(IndexMode) {
   23493             :         case GF_SG_FIELD_CODING_IN:
   23494           0 :                 *allField = CoordinateInterpolator4D_In2All[inField];
   23495           0 :                 return GF_OK;
   23496             :         case GF_SG_FIELD_CODING_DEF:
   23497           0 :                 *allField = CoordinateInterpolator4D_Def2All[inField];
   23498           0 :                 return GF_OK;
   23499             :         case GF_SG_FIELD_CODING_OUT:
   23500           0 :                 *allField = CoordinateInterpolator4D_Out2All[inField];
   23501           0 :                 return GF_OK;
   23502             :         default:
   23503           0 :                 return GF_BAD_PARAM;
   23504             :         }
   23505           0 : }
   23506             : static GF_Err CoordinateInterpolator4D_get_field(GF_Node *node, GF_FieldInfo *info)
   23507             : {
   23508           0 :         switch (info->fieldIndex) {
   23509             :         case 0:
   23510           0 :                 info->name = "set_fraction";
   23511           0 :                 info->eventType = GF_SG_EVENT_IN;
   23512           0 :                 info->on_event_in = ((M_CoordinateInterpolator4D *)node)->on_set_fraction;
   23513           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23514           0 :                 info->far_ptr = & ((M_CoordinateInterpolator4D *) node)->set_fraction;
   23515           0 :                 return GF_OK;
   23516             :         case 1:
   23517           0 :                 info->name = "key";
   23518           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23519           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   23520           0 :                 info->far_ptr = & ((M_CoordinateInterpolator4D *) node)->key;
   23521           0 :                 return GF_OK;
   23522             :         case 2:
   23523           0 :                 info->name = "keyValue";
   23524           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23525           0 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   23526           0 :                 info->far_ptr = & ((M_CoordinateInterpolator4D *) node)->keyValue;
   23527           0 :                 return GF_OK;
   23528             :         case 3:
   23529           0 :                 info->name = "value_changed";
   23530           0 :                 info->eventType = GF_SG_EVENT_OUT;
   23531           0 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   23532           0 :                 info->far_ptr = & ((M_CoordinateInterpolator4D *) node)->value_changed;
   23533           0 :                 return GF_OK;
   23534             :         default:
   23535           0 :                 return GF_BAD_PARAM;
   23536             :         }
   23537           0 : }
   23538             : 
   23539             : 
   23540             : static s32 CoordinateInterpolator4D_get_field_index_by_name(char *name)
   23541             : {
   23542           0 :         if (!strcmp("set_fraction", name)) return 0;
   23543           0 :         if (!strcmp("key", name)) return 1;
   23544           0 :         if (!strcmp("keyValue", name)) return 2;
   23545           0 :         if (!strcmp("value_changed", name)) return 3;
   23546           0 :         return -1;
   23547           0 : }
   23548             : static Bool CoordinateInterpolator4D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23549             : {
   23550           0 :         switch (FieldIndex) {
   23551             :         case 1:
   23552           0 :                 *AType = 0;
   23553           0 :                 *QType = 8;
   23554           0 :                 *b_min = FLT2FIX(0);
   23555           0 :                 *b_max = FLT2FIX(1);
   23556           0 :                 return 1;
   23557             :         case 2:
   23558           0 :                 *AType = 0;
   23559           0 :                 *QType = 15;
   23560           0 :                 *b_min = FIX_MIN;
   23561           0 :                 *b_max = FIX_MAX;
   23562           0 :                 return 1;
   23563             :         default:
   23564           0 :                 return 0;
   23565             :         }
   23566           0 : }
   23567             : 
   23568             : 
   23569             : 
   23570             : GF_Node *CoordinateInterpolator4D_Create()
   23571             : {
   23572             :         M_CoordinateInterpolator4D *p;
   23573           0 :         GF_SAFEALLOC(p, M_CoordinateInterpolator4D);
   23574           0 :         if(!p) return NULL;
   23575           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CoordinateInterpolator4D);
   23576             : 
   23577             :         /*default field values*/
   23578           0 :         return (GF_Node *)p;
   23579           0 : }
   23580             : 
   23581             : 
   23582             : /*
   23583             :         DepthImage Node deletion
   23584             : */
   23585             : 
   23586             : static void DepthImage_Del(GF_Node *node)
   23587             : {
   23588           0 :         M_DepthImage *p = (M_DepthImage *) node;
   23589           0 :         gf_node_unregister((GF_Node *) p->diTexture, (GF_Node *) p);
   23590           0 :         gf_node_free((GF_Node *) p);
   23591           0 : }
   23592             : 
   23593             : static const u16 DepthImage_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   23594             : 
   23595             : static u32 DepthImage_get_field_count(GF_Node *node, u8 IndexMode)
   23596             : {
   23597           0 :         switch(IndexMode) {
   23598             :         case GF_SG_FIELD_CODING_IN:
   23599           0 :                 return 0;
   23600             :         case GF_SG_FIELD_CODING_DEF:
   23601           0 :                 return 7;
   23602             :         case GF_SG_FIELD_CODING_OUT:
   23603           0 :                 return 0;
   23604             :         case GF_SG_FIELD_CODING_DYN:
   23605           0 :                 return 0;
   23606             :         default:
   23607           0 :                 return 7;
   23608             :         }
   23609           0 : }
   23610             : 
   23611             : static GF_Err DepthImage_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23612             : {
   23613           0 :         switch(IndexMode) {
   23614             :         case GF_SG_FIELD_CODING_DEF:
   23615           0 :                 *allField = DepthImage_Def2All[inField];
   23616           0 :                 return GF_OK;
   23617             :         default:
   23618           0 :                 return GF_BAD_PARAM;
   23619             :         }
   23620           0 : }
   23621             : static GF_Err DepthImage_get_field(GF_Node *node, GF_FieldInfo *info)
   23622             : {
   23623           0 :         switch (info->fieldIndex) {
   23624             :         case 0:
   23625           0 :                 info->name = "diTexture";
   23626           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23627           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   23628           0 :                 info->NDTtype = NDT_SFDepthTextureNode;
   23629           0 :                 info->far_ptr = & ((M_DepthImage *)node)->diTexture;
   23630           0 :                 return GF_OK;
   23631             :         case 1:
   23632           0 :                 info->name = "farPlane";
   23633           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23634           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23635           0 :                 info->far_ptr = & ((M_DepthImage *) node)->farPlane;
   23636           0 :                 return GF_OK;
   23637             :         case 2:
   23638           0 :                 info->name = "fieldOfView";
   23639           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23640           0 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   23641           0 :                 info->far_ptr = & ((M_DepthImage *) node)->fieldOfView;
   23642           0 :                 return GF_OK;
   23643             :         case 3:
   23644           0 :                 info->name = "nearPlane";
   23645           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23646           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23647           0 :                 info->far_ptr = & ((M_DepthImage *) node)->nearPlane;
   23648           0 :                 return GF_OK;
   23649             :         case 4:
   23650           0 :                 info->name = "orientation";
   23651           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23652           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   23653           0 :                 info->far_ptr = & ((M_DepthImage *) node)->orientation;
   23654           0 :                 return GF_OK;
   23655             :         case 5:
   23656           0 :                 info->name = "orthographic";
   23657           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23658           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23659           0 :                 info->far_ptr = & ((M_DepthImage *) node)->orthographic;
   23660           0 :                 return GF_OK;
   23661             :         case 6:
   23662           0 :                 info->name = "position";
   23663           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23664           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   23665           0 :                 info->far_ptr = & ((M_DepthImage *) node)->position;
   23666           0 :                 return GF_OK;
   23667             :         default:
   23668           0 :                 return GF_BAD_PARAM;
   23669             :         }
   23670           0 : }
   23671             : 
   23672             : 
   23673             : static s32 DepthImage_get_field_index_by_name(char *name)
   23674             : {
   23675           0 :         if (!strcmp("diTexture", name)) return 0;
   23676           0 :         if (!strcmp("farPlane", name)) return 1;
   23677           0 :         if (!strcmp("fieldOfView", name)) return 2;
   23678           0 :         if (!strcmp("nearPlane", name)) return 3;
   23679           0 :         if (!strcmp("orientation", name)) return 4;
   23680           0 :         if (!strcmp("orthographic", name)) return 5;
   23681           0 :         if (!strcmp("position", name)) return 6;
   23682           0 :         return -1;
   23683           0 : }
   23684             : static Bool DepthImage_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23685             : {
   23686             :         switch (FieldIndex) {
   23687             :         default:
   23688           0 :                 return 0;
   23689             :         }
   23690             : }
   23691             : 
   23692             : 
   23693             : 
   23694             : GF_Node *DepthImage_Create()
   23695             : {
   23696             :         M_DepthImage *p;
   23697           0 :         GF_SAFEALLOC(p, M_DepthImage);
   23698           0 :         if(!p) return NULL;
   23699           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DepthImage);
   23700             : 
   23701             :         /*default field values*/
   23702           0 :         p->farPlane = FLT2FIX(100);
   23703           0 :         p->fieldOfView.x = FLT2FIX(0.785398);
   23704           0 :         p->fieldOfView.y = FLT2FIX(0.785398);
   23705           0 :         p->nearPlane = FLT2FIX(10);
   23706           0 :         p->orientation.x = FLT2FIX(0);
   23707           0 :         p->orientation.y = FLT2FIX(0);
   23708           0 :         p->orientation.z = FLT2FIX(1);
   23709           0 :         p->orientation.q = FLT2FIX(0);
   23710           0 :         p->orthographic = 1;
   23711           0 :         p->position.x = FLT2FIX(0);
   23712           0 :         p->position.y = FLT2FIX(0);
   23713           0 :         p->position.z = FLT2FIX(10);
   23714           0 :         return (GF_Node *)p;
   23715           0 : }
   23716             : 
   23717             : 
   23718             : /*
   23719             :         FFD Node deletion
   23720             : */
   23721             : 
   23722             : static void FFD_Del(GF_Node *node)
   23723             : {
   23724           0 :         M_FFD *p = (M_FFD *) node;
   23725           0 :         gf_sg_mfvec4f_del(p->controlPoint);
   23726           0 :         gf_sg_mffloat_del(p->uKnot);
   23727           0 :         gf_sg_mffloat_del(p->vKnot);
   23728           0 :         gf_sg_mffloat_del(p->wKnot);
   23729           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   23730           0 :         gf_node_free((GF_Node *) p);
   23731           0 : }
   23732             : 
   23733             : static const u16 FFD_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   23734             : static const u16 FFD_In2All[] = { 0, 1, 2, 3};
   23735             : static const u16 FFD_Out2All[] = { 2, 3};
   23736             : static const u16 FFD_Dyn2All[] = { 3};
   23737             : 
   23738             : static u32 FFD_get_field_count(GF_Node *node, u8 IndexMode)
   23739             : {
   23740           0 :         switch(IndexMode) {
   23741             :         case GF_SG_FIELD_CODING_IN:
   23742           0 :                 return 4;
   23743             :         case GF_SG_FIELD_CODING_DEF:
   23744           0 :                 return 11;
   23745             :         case GF_SG_FIELD_CODING_OUT:
   23746           0 :                 return 2;
   23747             :         case GF_SG_FIELD_CODING_DYN:
   23748           0 :                 return 1;
   23749             :         default:
   23750           0 :                 return 13;
   23751             :         }
   23752           0 : }
   23753             : 
   23754             : static GF_Err FFD_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23755             : {
   23756           0 :         switch(IndexMode) {
   23757             :         case GF_SG_FIELD_CODING_IN:
   23758           0 :                 *allField = FFD_In2All[inField];
   23759           0 :                 return GF_OK;
   23760             :         case GF_SG_FIELD_CODING_DEF:
   23761           0 :                 *allField = FFD_Def2All[inField];
   23762           0 :                 return GF_OK;
   23763             :         case GF_SG_FIELD_CODING_OUT:
   23764           0 :                 *allField = FFD_Out2All[inField];
   23765           0 :                 return GF_OK;
   23766             :         case GF_SG_FIELD_CODING_DYN:
   23767           0 :                 *allField = FFD_Dyn2All[inField];
   23768           0 :                 return GF_OK;
   23769             :         default:
   23770           0 :                 return GF_BAD_PARAM;
   23771             :         }
   23772           0 : }
   23773             : static GF_Err FFD_get_field(GF_Node *node, GF_FieldInfo *info)
   23774             : {
   23775           0 :         switch (info->fieldIndex) {
   23776             :         case 0:
   23777           0 :                 info->name = "addChildren";
   23778           0 :                 info->eventType = GF_SG_EVENT_IN;
   23779           0 :                 info->on_event_in = ((M_FFD *)node)->on_addChildren;
   23780           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   23781           0 :                 info->NDTtype = NDT_SF3DNode;
   23782           0 :                 info->far_ptr = & ((M_FFD *)node)->addChildren;
   23783           0 :                 return GF_OK;
   23784             :         case 1:
   23785           0 :                 info->name = "removeChildren";
   23786           0 :                 info->eventType = GF_SG_EVENT_IN;
   23787           0 :                 info->on_event_in = ((M_FFD *)node)->on_removeChildren;
   23788           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   23789           0 :                 info->NDTtype = NDT_SF3DNode;
   23790           0 :                 info->far_ptr = & ((M_FFD *)node)->removeChildren;
   23791           0 :                 return GF_OK;
   23792             :         case 2:
   23793           0 :                 info->name = "children";
   23794           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23795           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   23796           0 :                 info->NDTtype = NDT_SF3DNode;
   23797           0 :                 info->far_ptr = & ((M_FFD *)node)->children;
   23798           0 :                 return GF_OK;
   23799             :         case 3:
   23800           0 :                 info->name = "controlPoint";
   23801           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23802           0 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   23803           0 :                 info->far_ptr = & ((M_FFD *) node)->controlPoint;
   23804           0 :                 return GF_OK;
   23805             :         case 4:
   23806           0 :                 info->name = "uDimension";
   23807           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23808           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23809           0 :                 info->far_ptr = & ((M_FFD *) node)->uDimension;
   23810           0 :                 return GF_OK;
   23811             :         case 5:
   23812           0 :                 info->name = "uKnot";
   23813           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23814           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   23815           0 :                 info->far_ptr = & ((M_FFD *) node)->uKnot;
   23816           0 :                 return GF_OK;
   23817             :         case 6:
   23818           0 :                 info->name = "uOrder";
   23819           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23820           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23821           0 :                 info->far_ptr = & ((M_FFD *) node)->uOrder;
   23822           0 :                 return GF_OK;
   23823             :         case 7:
   23824           0 :                 info->name = "vDimension";
   23825           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23826           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23827           0 :                 info->far_ptr = & ((M_FFD *) node)->vDimension;
   23828           0 :                 return GF_OK;
   23829             :         case 8:
   23830           0 :                 info->name = "vKnot";
   23831           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23832           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   23833           0 :                 info->far_ptr = & ((M_FFD *) node)->vKnot;
   23834           0 :                 return GF_OK;
   23835             :         case 9:
   23836           0 :                 info->name = "vOrder";
   23837           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23838           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23839           0 :                 info->far_ptr = & ((M_FFD *) node)->vOrder;
   23840           0 :                 return GF_OK;
   23841             :         case 10:
   23842           0 :                 info->name = "wDimension";
   23843           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23844           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23845           0 :                 info->far_ptr = & ((M_FFD *) node)->wDimension;
   23846           0 :                 return GF_OK;
   23847             :         case 11:
   23848           0 :                 info->name = "wKnot";
   23849           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23850           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   23851           0 :                 info->far_ptr = & ((M_FFD *) node)->wKnot;
   23852           0 :                 return GF_OK;
   23853             :         case 12:
   23854           0 :                 info->name = "wOrder";
   23855           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   23856           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23857           0 :                 info->far_ptr = & ((M_FFD *) node)->wOrder;
   23858           0 :                 return GF_OK;
   23859             :         default:
   23860           0 :                 return GF_BAD_PARAM;
   23861             :         }
   23862           0 : }
   23863             : 
   23864             : 
   23865             : static s32 FFD_get_field_index_by_name(char *name)
   23866             : {
   23867           0 :         if (!strcmp("addChildren", name)) return 0;
   23868           0 :         if (!strcmp("removeChildren", name)) return 1;
   23869           0 :         if (!strcmp("children", name)) return 2;
   23870           0 :         if (!strcmp("controlPoint", name)) return 3;
   23871           0 :         if (!strcmp("uDimension", name)) return 4;
   23872           0 :         if (!strcmp("uKnot", name)) return 5;
   23873           0 :         if (!strcmp("uOrder", name)) return 6;
   23874           0 :         if (!strcmp("vDimension", name)) return 7;
   23875           0 :         if (!strcmp("vKnot", name)) return 8;
   23876           0 :         if (!strcmp("vOrder", name)) return 9;
   23877           0 :         if (!strcmp("wDimension", name)) return 10;
   23878           0 :         if (!strcmp("wKnot", name)) return 11;
   23879           0 :         if (!strcmp("wOrder", name)) return 12;
   23880           0 :         return -1;
   23881           0 : }
   23882             : static Bool FFD_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23883             : {
   23884           0 :         switch (FieldIndex) {
   23885             :         case 3:
   23886           0 :                 *AType = 15;
   23887           0 :                 *QType = 15;
   23888           0 :                 *b_min = FIX_MIN;
   23889           0 :                 *b_max = FIX_MAX;
   23890           0 :                 return 1;
   23891             :         case 4:
   23892           0 :                 *AType = 0;
   23893           0 :                 *QType = 13;
   23894           0 :                 *QT13_bits = 8;
   23895           0 :                 *b_min = FLT2FIX(2);
   23896           0 :                 *b_max = FLT2FIX(257);
   23897           0 :                 return 1;
   23898             :         case 6:
   23899           0 :                 *AType = 0;
   23900           0 :                 *QType = 13;
   23901           0 :                 *QT13_bits = 5;
   23902           0 :                 *b_min = FLT2FIX(2);
   23903           0 :                 *b_max = FLT2FIX(33);
   23904           0 :                 return 1;
   23905             :         case 7:
   23906           0 :                 *AType = 0;
   23907           0 :                 *QType = 13;
   23908           0 :                 *QT13_bits = 8;
   23909           0 :                 *b_min = FLT2FIX(2);
   23910           0 :                 *b_max = FLT2FIX(257);
   23911           0 :                 return 1;
   23912             :         case 9:
   23913           0 :                 *AType = 0;
   23914           0 :                 *QType = 13;
   23915           0 :                 *QT13_bits = 5;
   23916           0 :                 *b_min = FLT2FIX(2);
   23917           0 :                 *b_max = FLT2FIX(33);
   23918           0 :                 return 1;
   23919             :         case 10:
   23920           0 :                 *AType = 0;
   23921           0 :                 *QType = 13;
   23922           0 :                 *QT13_bits = 8;
   23923           0 :                 *b_min = FLT2FIX(2);
   23924           0 :                 *b_max = FLT2FIX(257);
   23925           0 :                 return 1;
   23926             :         case 12:
   23927           0 :                 *AType = 0;
   23928           0 :                 *QType = 13;
   23929           0 :                 *QT13_bits = 5;
   23930           0 :                 *b_min = FLT2FIX(2);
   23931           0 :                 *b_max = FLT2FIX(33);
   23932           0 :                 return 1;
   23933             :         default:
   23934           0 :                 return 0;
   23935             :         }
   23936           0 : }
   23937             : 
   23938             : 
   23939             : 
   23940             : GF_Node *FFD_Create()
   23941             : {
   23942             :         M_FFD *p;
   23943           0 :         GF_SAFEALLOC(p, M_FFD);
   23944           0 :         if(!p) return NULL;
   23945           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FFD);
   23946           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   23947             : 
   23948             :         /*default field values*/
   23949           0 :         p->uDimension = 2;
   23950           0 :         p->uOrder = 2;
   23951           0 :         p->vDimension = 2;
   23952           0 :         p->vOrder = 2;
   23953           0 :         p->wDimension = 2;
   23954           0 :         p->wOrder = 2;
   23955           0 :         return (GF_Node *)p;
   23956           0 : }
   23957             : 
   23958             : 
   23959             : /*
   23960             :         Implicit Node deletion
   23961             : */
   23962             : 
   23963             : static void Implicit_Del(GF_Node *node)
   23964             : {
   23965           0 :         M_Implicit *p = (M_Implicit *) node;
   23966           0 :         gf_sg_mffloat_del(p->c);
   23967           0 :         gf_sg_mfint32_del(p->densities);
   23968           0 :         gf_node_free((GF_Node *) p);
   23969           0 : }
   23970             : 
   23971             : static const u16 Implicit_Def2All[] = { 0, 1, 2, 3, 4};
   23972             : static const u16 Implicit_In2All[] = { 0, 1, 2, 3, 4};
   23973             : static const u16 Implicit_Out2All[] = { 0, 1, 2, 3, 4};
   23974             : static const u16 Implicit_Dyn2All[] = { 0, 1};
   23975             : 
   23976             : static u32 Implicit_get_field_count(GF_Node *node, u8 IndexMode)
   23977             : {
   23978           0 :         switch(IndexMode) {
   23979             :         case GF_SG_FIELD_CODING_IN:
   23980           0 :                 return 5;
   23981             :         case GF_SG_FIELD_CODING_DEF:
   23982           0 :                 return 5;
   23983             :         case GF_SG_FIELD_CODING_OUT:
   23984           0 :                 return 5;
   23985             :         case GF_SG_FIELD_CODING_DYN:
   23986           0 :                 return 2;
   23987             :         default:
   23988           0 :                 return 5;
   23989             :         }
   23990           0 : }
   23991             : 
   23992             : static GF_Err Implicit_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23993             : {
   23994           0 :         switch(IndexMode) {
   23995             :         case GF_SG_FIELD_CODING_IN:
   23996           0 :                 *allField = Implicit_In2All[inField];
   23997           0 :                 return GF_OK;
   23998             :         case GF_SG_FIELD_CODING_DEF:
   23999           0 :                 *allField = Implicit_Def2All[inField];
   24000           0 :                 return GF_OK;
   24001             :         case GF_SG_FIELD_CODING_OUT:
   24002           0 :                 *allField = Implicit_Out2All[inField];
   24003           0 :                 return GF_OK;
   24004             :         case GF_SG_FIELD_CODING_DYN:
   24005           0 :                 *allField = Implicit_Dyn2All[inField];
   24006           0 :                 return GF_OK;
   24007             :         default:
   24008           0 :                 return GF_BAD_PARAM;
   24009             :         }
   24010           0 : }
   24011             : static GF_Err Implicit_get_field(GF_Node *node, GF_FieldInfo *info)
   24012             : {
   24013           0 :         switch (info->fieldIndex) {
   24014             :         case 0:
   24015           0 :                 info->name = "bboxSize";
   24016           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24017           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   24018           0 :                 info->far_ptr = & ((M_Implicit *) node)->bboxSize;
   24019           0 :                 return GF_OK;
   24020             :         case 1:
   24021           0 :                 info->name = "c";
   24022           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24023           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   24024           0 :                 info->far_ptr = & ((M_Implicit *) node)->c;
   24025           0 :                 return GF_OK;
   24026             :         case 2:
   24027           0 :                 info->name = "densities";
   24028           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24029           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24030           0 :                 info->far_ptr = & ((M_Implicit *) node)->densities;
   24031           0 :                 return GF_OK;
   24032             :         case 3:
   24033           0 :                 info->name = "dual";
   24034           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24035           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   24036           0 :                 info->far_ptr = & ((M_Implicit *) node)->dual;
   24037           0 :                 return GF_OK;
   24038             :         case 4:
   24039           0 :                 info->name = "solid";
   24040           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24041           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   24042           0 :                 info->far_ptr = & ((M_Implicit *) node)->solid;
   24043           0 :                 return GF_OK;
   24044             :         default:
   24045           0 :                 return GF_BAD_PARAM;
   24046             :         }
   24047           0 : }
   24048             : 
   24049             : 
   24050             : static s32 Implicit_get_field_index_by_name(char *name)
   24051             : {
   24052           0 :         if (!strcmp("bboxSize", name)) return 0;
   24053           0 :         if (!strcmp("c", name)) return 1;
   24054           0 :         if (!strcmp("densities", name)) return 2;
   24055           0 :         if (!strcmp("dual", name)) return 3;
   24056           0 :         if (!strcmp("solid", name)) return 4;
   24057           0 :         return -1;
   24058           0 : }
   24059             : static Bool Implicit_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24060             : {
   24061           0 :         switch (FieldIndex) {
   24062             :         case 0:
   24063           0 :                 *AType = 11;
   24064           0 :                 *QType = 11;
   24065           0 :                 *b_min = FLT2FIX(0);
   24066           0 :                 *b_max = FIX_MAX;
   24067           0 :                 return 1;
   24068             :         case 1:
   24069           0 :                 *AType = 7;
   24070           0 :                 *QType = 0;
   24071           0 :                 *b_min = FIX_MIN;
   24072           0 :                 *b_max = FIX_MAX;
   24073           0 :                 return 1;
   24074             :         default:
   24075           0 :                 return 0;
   24076             :         }
   24077           0 : }
   24078             : 
   24079             : 
   24080             : 
   24081             : GF_Node *Implicit_Create()
   24082             : {
   24083             :         M_Implicit *p;
   24084           0 :         GF_SAFEALLOC(p, M_Implicit);
   24085           0 :         if(!p) return NULL;
   24086           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Implicit);
   24087             : 
   24088             :         /*default field values*/
   24089           0 :         p->bboxSize.x = FLT2FIX(2);
   24090           0 :         p->bboxSize.y = FLT2FIX(2);
   24091           0 :         p->bboxSize.z = FLT2FIX(2);
   24092           0 :         return (GF_Node *)p;
   24093           0 : }
   24094             : 
   24095             : 
   24096             : /*
   24097             :         XXLFM_Appearance Node deletion
   24098             : */
   24099             : 
   24100             : static void XXLFM_Appearance_Del(GF_Node *node)
   24101             : {
   24102           0 :         M_XXLFM_Appearance *p = (M_XXLFM_Appearance *) node;
   24103           0 :         gf_node_unregister((GF_Node *) p->blendList, (GF_Node *) p);
   24104           0 :         gf_node_unregister_children((GF_Node *) p, p->lightMapList);
   24105           0 :         gf_node_unregister_children((GF_Node *) p, p->tileList);
   24106           0 :         gf_node_unregister((GF_Node *) p->vertexFrameList, (GF_Node *) p);
   24107           0 :         gf_node_free((GF_Node *) p);
   24108           0 : }
   24109             : 
   24110             : static const u16 XXLFM_Appearance_Def2All[] = { 0, 1, 2, 3};
   24111             : static const u16 XXLFM_Appearance_In2All[] = { 0, 1, 2, 3};
   24112             : static const u16 XXLFM_Appearance_Out2All[] = { 0, 1, 2, 3};
   24113             : 
   24114             : static u32 XXLFM_Appearance_get_field_count(GF_Node *node, u8 IndexMode)
   24115             : {
   24116           0 :         switch(IndexMode) {
   24117             :         case GF_SG_FIELD_CODING_IN:
   24118           0 :                 return 4;
   24119             :         case GF_SG_FIELD_CODING_DEF:
   24120           0 :                 return 4;
   24121             :         case GF_SG_FIELD_CODING_OUT:
   24122           0 :                 return 4;
   24123             :         case GF_SG_FIELD_CODING_DYN:
   24124           0 :                 return 0;
   24125             :         default:
   24126           0 :                 return 4;
   24127             :         }
   24128           0 : }
   24129             : 
   24130             : static GF_Err XXLFM_Appearance_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24131             : {
   24132           0 :         switch(IndexMode) {
   24133             :         case GF_SG_FIELD_CODING_IN:
   24134           0 :                 *allField = XXLFM_Appearance_In2All[inField];
   24135           0 :                 return GF_OK;
   24136             :         case GF_SG_FIELD_CODING_DEF:
   24137           0 :                 *allField = XXLFM_Appearance_Def2All[inField];
   24138           0 :                 return GF_OK;
   24139             :         case GF_SG_FIELD_CODING_OUT:
   24140           0 :                 *allField = XXLFM_Appearance_Out2All[inField];
   24141           0 :                 return GF_OK;
   24142             :         default:
   24143           0 :                 return GF_BAD_PARAM;
   24144             :         }
   24145           0 : }
   24146             : static GF_Err XXLFM_Appearance_get_field(GF_Node *node, GF_FieldInfo *info)
   24147             : {
   24148           0 :         switch (info->fieldIndex) {
   24149             :         case 0:
   24150           0 :                 info->name = "blendList";
   24151           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24152           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24153           0 :                 info->NDTtype = NDT_SFBlendListNode;
   24154           0 :                 info->far_ptr = & ((M_XXLFM_Appearance *)node)->blendList;
   24155           0 :                 return GF_OK;
   24156             :         case 1:
   24157           0 :                 info->name = "lightMapList";
   24158           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24159           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   24160           0 :                 info->NDTtype = NDT_SFLightMapNode;
   24161           0 :                 info->far_ptr = & ((M_XXLFM_Appearance *)node)->lightMapList;
   24162           0 :                 return GF_OK;
   24163             :         case 2:
   24164           0 :                 info->name = "tileList";
   24165           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24166           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   24167           0 :                 info->NDTtype = NDT_SFTextureNode;
   24168           0 :                 info->far_ptr = & ((M_XXLFM_Appearance *)node)->tileList;
   24169           0 :                 return GF_OK;
   24170             :         case 3:
   24171           0 :                 info->name = "vertexFrameList";
   24172           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24173           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24174           0 :                 info->NDTtype = NDT_SFFrameListNode;
   24175           0 :                 info->far_ptr = & ((M_XXLFM_Appearance *)node)->vertexFrameList;
   24176           0 :                 return GF_OK;
   24177             :         default:
   24178           0 :                 return GF_BAD_PARAM;
   24179             :         }
   24180           0 : }
   24181             : 
   24182             : 
   24183             : static s32 XXLFM_Appearance_get_field_index_by_name(char *name)
   24184             : {
   24185           0 :         if (!strcmp("blendList", name)) return 0;
   24186           0 :         if (!strcmp("lightMapList", name)) return 1;
   24187           0 :         if (!strcmp("tileList", name)) return 2;
   24188           0 :         if (!strcmp("vertexFrameList", name)) return 3;
   24189           0 :         return -1;
   24190           0 : }
   24191             : static Bool XXLFM_Appearance_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24192             : {
   24193             :         switch (FieldIndex) {
   24194             :         default:
   24195           0 :                 return 0;
   24196             :         }
   24197             : }
   24198             : 
   24199             : 
   24200             : 
   24201             : GF_Node *XXLFM_Appearance_Create()
   24202             : {
   24203             :         M_XXLFM_Appearance *p;
   24204           0 :         GF_SAFEALLOC(p, M_XXLFM_Appearance);
   24205           0 :         if(!p) return NULL;
   24206           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_Appearance);
   24207             : 
   24208             :         /*default field values*/
   24209           0 :         return (GF_Node *)p;
   24210           0 : }
   24211             : 
   24212             : 
   24213             : /*
   24214             :         XXLFM_BlendList Node deletion
   24215             : */
   24216             : 
   24217             : static void XXLFM_BlendList_Del(GF_Node *node)
   24218             : {
   24219           0 :         M_XXLFM_BlendList *p = (M_XXLFM_BlendList *) node;
   24220           0 :         gf_sg_mfint32_del(p->blendMode);
   24221           0 :         gf_sg_mfint32_del(p->lightMapIndex);
   24222           0 :         gf_node_free((GF_Node *) p);
   24223           0 : }
   24224             : 
   24225             : static const u16 XXLFM_BlendList_Def2All[] = { 0, 1};
   24226             : static const u16 XXLFM_BlendList_In2All[] = { 0, 1};
   24227             : static const u16 XXLFM_BlendList_Out2All[] = { 0, 1};
   24228             : 
   24229             : static u32 XXLFM_BlendList_get_field_count(GF_Node *node, u8 IndexMode)
   24230             : {
   24231           0 :         switch(IndexMode) {
   24232             :         case GF_SG_FIELD_CODING_IN:
   24233           0 :                 return 2;
   24234             :         case GF_SG_FIELD_CODING_DEF:
   24235           0 :                 return 2;
   24236             :         case GF_SG_FIELD_CODING_OUT:
   24237           0 :                 return 2;
   24238             :         case GF_SG_FIELD_CODING_DYN:
   24239           0 :                 return 0;
   24240             :         default:
   24241           0 :                 return 2;
   24242             :         }
   24243           0 : }
   24244             : 
   24245             : static GF_Err XXLFM_BlendList_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24246             : {
   24247           0 :         switch(IndexMode) {
   24248             :         case GF_SG_FIELD_CODING_IN:
   24249           0 :                 *allField = XXLFM_BlendList_In2All[inField];
   24250           0 :                 return GF_OK;
   24251             :         case GF_SG_FIELD_CODING_DEF:
   24252           0 :                 *allField = XXLFM_BlendList_Def2All[inField];
   24253           0 :                 return GF_OK;
   24254             :         case GF_SG_FIELD_CODING_OUT:
   24255           0 :                 *allField = XXLFM_BlendList_Out2All[inField];
   24256           0 :                 return GF_OK;
   24257             :         default:
   24258           0 :                 return GF_BAD_PARAM;
   24259             :         }
   24260           0 : }
   24261             : static GF_Err XXLFM_BlendList_get_field(GF_Node *node, GF_FieldInfo *info)
   24262             : {
   24263           0 :         switch (info->fieldIndex) {
   24264             :         case 0:
   24265           0 :                 info->name = "blendMode";
   24266           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24267           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24268           0 :                 info->far_ptr = & ((M_XXLFM_BlendList *) node)->blendMode;
   24269           0 :                 return GF_OK;
   24270             :         case 1:
   24271           0 :                 info->name = "lightMapIndex";
   24272           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24273           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24274           0 :                 info->far_ptr = & ((M_XXLFM_BlendList *) node)->lightMapIndex;
   24275           0 :                 return GF_OK;
   24276             :         default:
   24277           0 :                 return GF_BAD_PARAM;
   24278             :         }
   24279           0 : }
   24280             : 
   24281             : 
   24282             : static s32 XXLFM_BlendList_get_field_index_by_name(char *name)
   24283             : {
   24284           0 :         if (!strcmp("blendMode", name)) return 0;
   24285           0 :         if (!strcmp("lightMapIndex", name)) return 1;
   24286           0 :         return -1;
   24287           0 : }
   24288             : static Bool XXLFM_BlendList_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24289             : {
   24290           0 :         switch (FieldIndex) {
   24291             :         case 0:
   24292           0 :                 *AType = 0;
   24293           0 :                 *QType = 13;
   24294           0 :                 *QT13_bits = 1;
   24295           0 :                 *b_min = FLT2FIX(0);
   24296           0 :                 *b_max = FLT2FIX(1);
   24297           0 :                 return 1;
   24298             :         case 1:
   24299           0 :                 *AType = 0;
   24300           0 :                 *QType = 14;
   24301           0 :                 return 1;
   24302             :         default:
   24303           0 :                 return 0;
   24304             :         }
   24305           0 : }
   24306             : 
   24307             : 
   24308             : 
   24309             : GF_Node *XXLFM_BlendList_Create()
   24310             : {
   24311             :         M_XXLFM_BlendList *p;
   24312           0 :         GF_SAFEALLOC(p, M_XXLFM_BlendList);
   24313           0 :         if(!p) return NULL;
   24314           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_BlendList);
   24315             : 
   24316             :         /*default field values*/
   24317           0 :         return (GF_Node *)p;
   24318           0 : }
   24319             : 
   24320             : 
   24321             : /*
   24322             :         XXLFM_FrameList Node deletion
   24323             : */
   24324             : 
   24325             : static void XXLFM_FrameList_Del(GF_Node *node)
   24326             : {
   24327           0 :         M_XXLFM_FrameList *p = (M_XXLFM_FrameList *) node;
   24328           0 :         gf_sg_mfint32_del(p->index);
   24329           0 :         gf_sg_mfvec3f_del(p->frame);
   24330           0 :         gf_node_free((GF_Node *) p);
   24331           0 : }
   24332             : 
   24333             : static const u16 XXLFM_FrameList_Def2All[] = { 0, 1};
   24334             : static const u16 XXLFM_FrameList_In2All[] = { 0, 1};
   24335             : static const u16 XXLFM_FrameList_Out2All[] = { 0, 1};
   24336             : 
   24337             : static u32 XXLFM_FrameList_get_field_count(GF_Node *node, u8 IndexMode)
   24338             : {
   24339           0 :         switch(IndexMode) {
   24340             :         case GF_SG_FIELD_CODING_IN:
   24341           0 :                 return 2;
   24342             :         case GF_SG_FIELD_CODING_DEF:
   24343           0 :                 return 2;
   24344             :         case GF_SG_FIELD_CODING_OUT:
   24345           0 :                 return 2;
   24346             :         case GF_SG_FIELD_CODING_DYN:
   24347           0 :                 return 0;
   24348             :         default:
   24349           0 :                 return 2;
   24350             :         }
   24351           0 : }
   24352             : 
   24353             : static GF_Err XXLFM_FrameList_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24354             : {
   24355           0 :         switch(IndexMode) {
   24356             :         case GF_SG_FIELD_CODING_IN:
   24357           0 :                 *allField = XXLFM_FrameList_In2All[inField];
   24358           0 :                 return GF_OK;
   24359             :         case GF_SG_FIELD_CODING_DEF:
   24360           0 :                 *allField = XXLFM_FrameList_Def2All[inField];
   24361           0 :                 return GF_OK;
   24362             :         case GF_SG_FIELD_CODING_OUT:
   24363           0 :                 *allField = XXLFM_FrameList_Out2All[inField];
   24364           0 :                 return GF_OK;
   24365             :         default:
   24366           0 :                 return GF_BAD_PARAM;
   24367             :         }
   24368           0 : }
   24369             : static GF_Err XXLFM_FrameList_get_field(GF_Node *node, GF_FieldInfo *info)
   24370             : {
   24371           0 :         switch (info->fieldIndex) {
   24372             :         case 0:
   24373           0 :                 info->name = "index";
   24374           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24375           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24376           0 :                 info->far_ptr = & ((M_XXLFM_FrameList *) node)->index;
   24377           0 :                 return GF_OK;
   24378             :         case 1:
   24379           0 :                 info->name = "frame";
   24380           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24381           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   24382           0 :                 info->far_ptr = & ((M_XXLFM_FrameList *) node)->frame;
   24383           0 :                 return GF_OK;
   24384             :         default:
   24385           0 :                 return GF_BAD_PARAM;
   24386             :         }
   24387           0 : }
   24388             : 
   24389             : 
   24390             : static s32 XXLFM_FrameList_get_field_index_by_name(char *name)
   24391             : {
   24392           0 :         if (!strcmp("index", name)) return 0;
   24393           0 :         if (!strcmp("frame", name)) return 1;
   24394           0 :         return -1;
   24395           0 : }
   24396             : static Bool XXLFM_FrameList_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24397             : {
   24398           0 :         switch (FieldIndex) {
   24399             :         case 0:
   24400           0 :                 *AType = 0;
   24401           0 :                 *QType = 14;
   24402           0 :                 return 1;
   24403             :         case 1:
   24404           0 :                 *AType = 0;
   24405           0 :                 *QType = 1;
   24406           0 :                 *b_min = FLT2FIX(-1);
   24407           0 :                 *b_max = FLT2FIX(1);
   24408           0 :                 return 1;
   24409             :         default:
   24410           0 :                 return 0;
   24411             :         }
   24412           0 : }
   24413             : 
   24414             : 
   24415             : 
   24416             : GF_Node *XXLFM_FrameList_Create()
   24417             : {
   24418             :         M_XXLFM_FrameList *p;
   24419           0 :         GF_SAFEALLOC(p, M_XXLFM_FrameList);
   24420           0 :         if(!p) return NULL;
   24421           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_FrameList);
   24422             : 
   24423             :         /*default field values*/
   24424           0 :         p->index.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   24425           0 :         p->index.count = 1;
   24426           0 :         p->index.vals[0] = -1;
   24427           0 :         p->frame.vals = (SFVec3f *)gf_malloc(sizeof(SFVec3f)*3);
   24428           0 :         p->frame.count = 3;
   24429           0 :         p->frame.vals[0].x = FLT2FIX(1);
   24430           0 :         p->frame.vals[0].y = FLT2FIX(0);
   24431           0 :         p->frame.vals[0].z = FLT2FIX(0);
   24432           0 :         p->frame.vals[1].x = FLT2FIX(0);
   24433           0 :         p->frame.vals[1].y = FLT2FIX(1);
   24434           0 :         p->frame.vals[1].z = FLT2FIX(0);
   24435           0 :         p->frame.vals[2].x = FLT2FIX(0);
   24436           0 :         p->frame.vals[2].y = FLT2FIX(0);
   24437           0 :         p->frame.vals[2].z = FLT2FIX(1);
   24438           0 :         return (GF_Node *)p;
   24439           0 : }
   24440             : 
   24441             : 
   24442             : /*
   24443             :         XXLFM_LightMap Node deletion
   24444             : */
   24445             : 
   24446             : static void XXLFM_LightMap_Del(GF_Node *node)
   24447             : {
   24448           0 :         M_XXLFM_LightMap *p = (M_XXLFM_LightMap *) node;
   24449           0 :         gf_node_unregister((GF_Node *) p->surfaceMapList, (GF_Node *) p);
   24450           0 :         gf_node_unregister((GF_Node *) p->viewMapList, (GF_Node *) p);
   24451           0 :         gf_node_free((GF_Node *) p);
   24452           0 : }
   24453             : 
   24454             : static const u16 XXLFM_LightMap_Def2All[] = { 0, 1, 2, 3, 4};
   24455             : static const u16 XXLFM_LightMap_In2All[] = { 0, 1, 2, 3, 4};
   24456             : static const u16 XXLFM_LightMap_Out2All[] = { 0, 1, 2, 3, 4};
   24457             : 
   24458             : static u32 XXLFM_LightMap_get_field_count(GF_Node *node, u8 IndexMode)
   24459             : {
   24460           0 :         switch(IndexMode) {
   24461             :         case GF_SG_FIELD_CODING_IN:
   24462           0 :                 return 5;
   24463             :         case GF_SG_FIELD_CODING_DEF:
   24464           0 :                 return 5;
   24465             :         case GF_SG_FIELD_CODING_OUT:
   24466           0 :                 return 5;
   24467             :         case GF_SG_FIELD_CODING_DYN:
   24468           0 :                 return 0;
   24469             :         default:
   24470           0 :                 return 5;
   24471             :         }
   24472           0 : }
   24473             : 
   24474             : static GF_Err XXLFM_LightMap_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24475             : {
   24476           0 :         switch(IndexMode) {
   24477             :         case GF_SG_FIELD_CODING_IN:
   24478           0 :                 *allField = XXLFM_LightMap_In2All[inField];
   24479           0 :                 return GF_OK;
   24480             :         case GF_SG_FIELD_CODING_DEF:
   24481           0 :                 *allField = XXLFM_LightMap_Def2All[inField];
   24482           0 :                 return GF_OK;
   24483             :         case GF_SG_FIELD_CODING_OUT:
   24484           0 :                 *allField = XXLFM_LightMap_Out2All[inField];
   24485           0 :                 return GF_OK;
   24486             :         default:
   24487           0 :                 return GF_BAD_PARAM;
   24488             :         }
   24489           0 : }
   24490             : static GF_Err XXLFM_LightMap_get_field(GF_Node *node, GF_FieldInfo *info)
   24491             : {
   24492           0 :         switch (info->fieldIndex) {
   24493             :         case 0:
   24494           0 :                 info->name = "biasRGB";
   24495           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24496           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   24497           0 :                 info->far_ptr = & ((M_XXLFM_LightMap *) node)->biasRGB;
   24498           0 :                 return GF_OK;
   24499             :         case 1:
   24500           0 :                 info->name = "priorityLevel";
   24501           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24502           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   24503           0 :                 info->far_ptr = & ((M_XXLFM_LightMap *) node)->priorityLevel;
   24504           0 :                 return GF_OK;
   24505             :         case 2:
   24506           0 :                 info->name = "scaleRGB";
   24507           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24508           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   24509           0 :                 info->far_ptr = & ((M_XXLFM_LightMap *) node)->scaleRGB;
   24510           0 :                 return GF_OK;
   24511             :         case 3:
   24512           0 :                 info->name = "surfaceMapList";
   24513           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24514           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24515           0 :                 info->NDTtype = NDT_SFSurfaceMapNode;
   24516           0 :                 info->far_ptr = & ((M_XXLFM_LightMap *)node)->surfaceMapList;
   24517           0 :                 return GF_OK;
   24518             :         case 4:
   24519           0 :                 info->name = "viewMapList";
   24520           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24521           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24522           0 :                 info->NDTtype = NDT_SFViewMapNode;
   24523           0 :                 info->far_ptr = & ((M_XXLFM_LightMap *)node)->viewMapList;
   24524           0 :                 return GF_OK;
   24525             :         default:
   24526           0 :                 return GF_BAD_PARAM;
   24527             :         }
   24528           0 : }
   24529             : 
   24530             : 
   24531             : static s32 XXLFM_LightMap_get_field_index_by_name(char *name)
   24532             : {
   24533           0 :         if (!strcmp("biasRGB", name)) return 0;
   24534           0 :         if (!strcmp("priorityLevel", name)) return 1;
   24535           0 :         if (!strcmp("scaleRGB", name)) return 2;
   24536           0 :         if (!strcmp("surfaceMapList", name)) return 3;
   24537           0 :         if (!strcmp("viewMapList", name)) return 4;
   24538           0 :         return -1;
   24539           0 : }
   24540             : static Bool XXLFM_LightMap_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24541             : {
   24542           0 :         switch (FieldIndex) {
   24543             :         case 0:
   24544           0 :                 *AType = 0;
   24545           0 :                 *QType = 7;
   24546           0 :                 *b_min = FLT2FIX(-1);
   24547           0 :                 *b_max = FLT2FIX(1);
   24548           0 :                 return 1;
   24549             :         case 1:
   24550           0 :                 *AType = 0;
   24551           0 :                 *QType = 13;
   24552           0 :                 *QT13_bits = 8;
   24553           0 :                 *b_min = FLT2FIX(0);
   24554           0 :                 *b_max = FLT2FIX(255);
   24555           0 :                 return 1;
   24556             :         case 2:
   24557           0 :                 *AType = 0;
   24558           0 :                 *QType = 7;
   24559           0 :                 *b_min = FLT2FIX(-1);
   24560           0 :                 *b_max = FLT2FIX(1);
   24561           0 :                 return 1;
   24562             :         default:
   24563           0 :                 return 0;
   24564             :         }
   24565           0 : }
   24566             : 
   24567             : 
   24568             : 
   24569             : GF_Node *XXLFM_LightMap_Create()
   24570             : {
   24571             :         M_XXLFM_LightMap *p;
   24572           0 :         GF_SAFEALLOC(p, M_XXLFM_LightMap);
   24573           0 :         if(!p) return NULL;
   24574           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_LightMap);
   24575             : 
   24576             :         /*default field values*/
   24577           0 :         p->biasRGB.x = FLT2FIX(0);
   24578           0 :         p->biasRGB.y = FLT2FIX(0);
   24579           0 :         p->biasRGB.z = FLT2FIX(0);
   24580           0 :         p->priorityLevel = 0;
   24581           0 :         p->scaleRGB.x = FLT2FIX(1);
   24582           0 :         p->scaleRGB.y = FLT2FIX(1);
   24583           0 :         p->scaleRGB.z = FLT2FIX(1);
   24584           0 :         return (GF_Node *)p;
   24585           0 : }
   24586             : 
   24587             : 
   24588             : /*
   24589             :         XXLFM_SurfaceMapList Node deletion
   24590             : */
   24591             : 
   24592             : static void XXLFM_SurfaceMapList_Del(GF_Node *node)
   24593             : {
   24594           0 :         M_XXLFM_SurfaceMapList *p = (M_XXLFM_SurfaceMapList *) node;
   24595           0 :         gf_sg_mfint32_del(p->tileIndex);
   24596           0 :         gf_node_unregister((GF_Node *) p->triangleCoordinate, (GF_Node *) p);
   24597           0 :         gf_sg_mfint32_del(p->triangleIndex);
   24598           0 :         gf_sg_mfint32_del(p->viewMapIndex);
   24599           0 :         gf_node_free((GF_Node *) p);
   24600           0 : }
   24601             : 
   24602             : static const u16 XXLFM_SurfaceMapList_Def2All[] = { 0, 1, 2, 3};
   24603             : static const u16 XXLFM_SurfaceMapList_In2All[] = { 0, 1, 2, 3};
   24604             : static const u16 XXLFM_SurfaceMapList_Out2All[] = { 0, 1, 2, 3};
   24605             : 
   24606             : static u32 XXLFM_SurfaceMapList_get_field_count(GF_Node *node, u8 IndexMode)
   24607             : {
   24608           0 :         switch(IndexMode) {
   24609             :         case GF_SG_FIELD_CODING_IN:
   24610           0 :                 return 4;
   24611             :         case GF_SG_FIELD_CODING_DEF:
   24612           0 :                 return 4;
   24613             :         case GF_SG_FIELD_CODING_OUT:
   24614           0 :                 return 4;
   24615             :         case GF_SG_FIELD_CODING_DYN:
   24616           0 :                 return 0;
   24617             :         default:
   24618           0 :                 return 4;
   24619             :         }
   24620           0 : }
   24621             : 
   24622             : static GF_Err XXLFM_SurfaceMapList_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24623             : {
   24624           0 :         switch(IndexMode) {
   24625             :         case GF_SG_FIELD_CODING_IN:
   24626           0 :                 *allField = XXLFM_SurfaceMapList_In2All[inField];
   24627           0 :                 return GF_OK;
   24628             :         case GF_SG_FIELD_CODING_DEF:
   24629           0 :                 *allField = XXLFM_SurfaceMapList_Def2All[inField];
   24630           0 :                 return GF_OK;
   24631             :         case GF_SG_FIELD_CODING_OUT:
   24632           0 :                 *allField = XXLFM_SurfaceMapList_Out2All[inField];
   24633           0 :                 return GF_OK;
   24634             :         default:
   24635           0 :                 return GF_BAD_PARAM;
   24636             :         }
   24637           0 : }
   24638             : static GF_Err XXLFM_SurfaceMapList_get_field(GF_Node *node, GF_FieldInfo *info)
   24639             : {
   24640           0 :         switch (info->fieldIndex) {
   24641             :         case 0:
   24642           0 :                 info->name = "tileIndex";
   24643           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24644           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24645           0 :                 info->far_ptr = & ((M_XXLFM_SurfaceMapList *) node)->tileIndex;
   24646           0 :                 return GF_OK;
   24647             :         case 1:
   24648           0 :                 info->name = "triangleCoordinate";
   24649           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24650           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24651           0 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   24652           0 :                 info->far_ptr = & ((M_XXLFM_SurfaceMapList *)node)->triangleCoordinate;
   24653           0 :                 return GF_OK;
   24654             :         case 2:
   24655           0 :                 info->name = "triangleIndex";
   24656           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24657           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24658           0 :                 info->far_ptr = & ((M_XXLFM_SurfaceMapList *) node)->triangleIndex;
   24659           0 :                 return GF_OK;
   24660             :         case 3:
   24661           0 :                 info->name = "viewMapIndex";
   24662           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24663           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24664           0 :                 info->far_ptr = & ((M_XXLFM_SurfaceMapList *) node)->viewMapIndex;
   24665           0 :                 return GF_OK;
   24666             :         default:
   24667           0 :                 return GF_BAD_PARAM;
   24668             :         }
   24669           0 : }
   24670             : 
   24671             : 
   24672             : static s32 XXLFM_SurfaceMapList_get_field_index_by_name(char *name)
   24673             : {
   24674           0 :         if (!strcmp("tileIndex", name)) return 0;
   24675           0 :         if (!strcmp("triangleCoordinate", name)) return 1;
   24676           0 :         if (!strcmp("triangleIndex", name)) return 2;
   24677           0 :         if (!strcmp("viewMapIndex", name)) return 3;
   24678           0 :         return -1;
   24679           0 : }
   24680             : static Bool XXLFM_SurfaceMapList_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24681             : {
   24682           0 :         switch (FieldIndex) {
   24683             :         case 0:
   24684           0 :                 *AType = 0;
   24685           0 :                 *QType = 14;
   24686           0 :                 return 1;
   24687             :         case 2:
   24688           0 :                 *AType = 0;
   24689           0 :                 *QType = 14;
   24690           0 :                 return 1;
   24691             :         case 3:
   24692           0 :                 *AType = 0;
   24693           0 :                 *QType = 14;
   24694           0 :                 return 1;
   24695             :         default:
   24696           0 :                 return 0;
   24697             :         }
   24698           0 : }
   24699             : 
   24700             : 
   24701             : 
   24702             : GF_Node *XXLFM_SurfaceMapList_Create()
   24703             : {
   24704             :         M_XXLFM_SurfaceMapList *p;
   24705           0 :         GF_SAFEALLOC(p, M_XXLFM_SurfaceMapList);
   24706           0 :         if(!p) return NULL;
   24707           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_SurfaceMapList);
   24708             : 
   24709             :         /*default field values*/
   24710           0 :         return (GF_Node *)p;
   24711           0 : }
   24712             : 
   24713             : 
   24714             : /*
   24715             :         XXLFM_ViewMapList Node deletion
   24716             : */
   24717             : 
   24718             : static void XXLFM_ViewMapList_Del(GF_Node *node)
   24719             : {
   24720           0 :         M_XXLFM_ViewMapList *p = (M_XXLFM_ViewMapList *) node;
   24721           0 :         gf_node_unregister((GF_Node *) p->textureOrigin, (GF_Node *) p);
   24722           0 :         gf_node_unregister((GF_Node *) p->textureSize, (GF_Node *) p);
   24723           0 :         gf_sg_mfint32_del(p->tileIndex);
   24724           0 :         gf_sg_mfint32_del(p->vertexIndex);
   24725           0 :         gf_node_free((GF_Node *) p);
   24726           0 : }
   24727             : 
   24728             : static const u16 XXLFM_ViewMapList_Def2All[] = { 0, 1, 2, 3};
   24729             : static const u16 XXLFM_ViewMapList_In2All[] = { 0, 1, 2, 3};
   24730             : static const u16 XXLFM_ViewMapList_Out2All[] = { 0, 1, 2, 3};
   24731             : 
   24732             : static u32 XXLFM_ViewMapList_get_field_count(GF_Node *node, u8 IndexMode)
   24733             : {
   24734           0 :         switch(IndexMode) {
   24735             :         case GF_SG_FIELD_CODING_IN:
   24736           0 :                 return 4;
   24737             :         case GF_SG_FIELD_CODING_DEF:
   24738           0 :                 return 4;
   24739             :         case GF_SG_FIELD_CODING_OUT:
   24740           0 :                 return 4;
   24741             :         case GF_SG_FIELD_CODING_DYN:
   24742           0 :                 return 0;
   24743             :         default:
   24744           0 :                 return 4;
   24745             :         }
   24746           0 : }
   24747             : 
   24748             : static GF_Err XXLFM_ViewMapList_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24749             : {
   24750           0 :         switch(IndexMode) {
   24751             :         case GF_SG_FIELD_CODING_IN:
   24752           0 :                 *allField = XXLFM_ViewMapList_In2All[inField];
   24753           0 :                 return GF_OK;
   24754             :         case GF_SG_FIELD_CODING_DEF:
   24755           0 :                 *allField = XXLFM_ViewMapList_Def2All[inField];
   24756           0 :                 return GF_OK;
   24757             :         case GF_SG_FIELD_CODING_OUT:
   24758           0 :                 *allField = XXLFM_ViewMapList_Out2All[inField];
   24759           0 :                 return GF_OK;
   24760             :         default:
   24761           0 :                 return GF_BAD_PARAM;
   24762             :         }
   24763           0 : }
   24764             : static GF_Err XXLFM_ViewMapList_get_field(GF_Node *node, GF_FieldInfo *info)
   24765             : {
   24766           0 :         switch (info->fieldIndex) {
   24767             :         case 0:
   24768           0 :                 info->name = "textureOrigin";
   24769           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24770           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24771           0 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   24772           0 :                 info->far_ptr = & ((M_XXLFM_ViewMapList *)node)->textureOrigin;
   24773           0 :                 return GF_OK;
   24774             :         case 1:
   24775           0 :                 info->name = "textureSize";
   24776           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24777           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24778           0 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   24779           0 :                 info->far_ptr = & ((M_XXLFM_ViewMapList *)node)->textureSize;
   24780           0 :                 return GF_OK;
   24781             :         case 2:
   24782           0 :                 info->name = "tileIndex";
   24783           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24784           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24785           0 :                 info->far_ptr = & ((M_XXLFM_ViewMapList *) node)->tileIndex;
   24786           0 :                 return GF_OK;
   24787             :         case 3:
   24788           0 :                 info->name = "vertexIndex";
   24789           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24790           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24791           0 :                 info->far_ptr = & ((M_XXLFM_ViewMapList *) node)->vertexIndex;
   24792           0 :                 return GF_OK;
   24793             :         default:
   24794           0 :                 return GF_BAD_PARAM;
   24795             :         }
   24796           0 : }
   24797             : 
   24798             : 
   24799             : static s32 XXLFM_ViewMapList_get_field_index_by_name(char *name)
   24800             : {
   24801           0 :         if (!strcmp("textureOrigin", name)) return 0;
   24802           0 :         if (!strcmp("textureSize", name)) return 1;
   24803           0 :         if (!strcmp("tileIndex", name)) return 2;
   24804           0 :         if (!strcmp("vertexIndex", name)) return 3;
   24805           0 :         return -1;
   24806           0 : }
   24807             : static Bool XXLFM_ViewMapList_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24808             : {
   24809           0 :         switch (FieldIndex) {
   24810             :         case 2:
   24811           0 :                 *AType = 0;
   24812           0 :                 *QType = 14;
   24813           0 :                 return 1;
   24814             :         case 3:
   24815           0 :                 *AType = 0;
   24816           0 :                 *QType = 14;
   24817           0 :                 return 1;
   24818             :         default:
   24819           0 :                 return 0;
   24820             :         }
   24821           0 : }
   24822             : 
   24823             : 
   24824             : 
   24825             : GF_Node *XXLFM_ViewMapList_Create()
   24826             : {
   24827             :         M_XXLFM_ViewMapList *p;
   24828           0 :         GF_SAFEALLOC(p, M_XXLFM_ViewMapList);
   24829           0 :         if(!p) return NULL;
   24830           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_ViewMapList);
   24831             : 
   24832             :         /*default field values*/
   24833           0 :         return (GF_Node *)p;
   24834           0 : }
   24835             : 
   24836             : 
   24837             : /*
   24838             :         MeshGrid Node deletion
   24839             : */
   24840             : 
   24841             : static void MeshGrid_Del(GF_Node *node)
   24842             : {
   24843           0 :         M_MeshGrid *p = (M_MeshGrid *) node;
   24844           0 :         gf_sg_mfint32_del(p->set_colorIndex);
   24845           0 :         gf_sg_mfint32_del(p->set_coordIndex);
   24846           0 :         gf_sg_mfint32_del(p->set_normalIndex);
   24847           0 :         gf_sg_mfint32_del(p->set_texCoordIndex);
   24848           0 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   24849           0 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
   24850           0 :         gf_node_unregister((GF_Node *) p->gridCoord, (GF_Node *) p);
   24851           0 :         gf_sg_mfint32_del(p->nLevels);
   24852           0 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
   24853           0 :         gf_sg_mfint32_del(p->nSlices);
   24854           0 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
   24855           0 :         gf_sg_mffloat_del(p->vertexOffset);
   24856           0 :         gf_sg_mfint32_del(p->vertexLink);
   24857           0 :         gf_sg_mfint32_del(p->colorIndex);
   24858           0 :         gf_sg_mfint32_del(p->coordIndex);
   24859           0 :         gf_sg_mfint32_del(p->normalIndex);
   24860           0 :         gf_sg_mfint32_del(p->texCoordIndex);
   24861           0 :         gf_sg_mfint32_del(p->nVertices);
   24862           0 :         gf_node_free((GF_Node *) p);
   24863           0 : }
   24864             : 
   24865             : static const u16 MeshGrid_Def2All[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   24866             : static const u16 MeshGrid_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
   24867             : static const u16 MeshGrid_Out2All[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 21, 22};
   24868             : static const u16 MeshGrid_Dyn2All[] = { 6, 7, 9, 10, 12, 14};
   24869             : 
   24870             : static u32 MeshGrid_get_field_count(GF_Node *node, u8 IndexMode)
   24871             : {
   24872           0 :         switch(IndexMode) {
   24873             :         case GF_SG_FIELD_CODING_IN:
   24874           0 :                 return 16;
   24875             :         case GF_SG_FIELD_CODING_DEF:
   24876           0 :                 return 17;
   24877             :         case GF_SG_FIELD_CODING_OUT:
   24878           0 :                 return 14;
   24879             :         case GF_SG_FIELD_CODING_DYN:
   24880           0 :                 return 6;
   24881             :         default:
   24882           0 :                 return 23;
   24883             :         }
   24884           0 : }
   24885             : 
   24886             : static GF_Err MeshGrid_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24887             : {
   24888           0 :         switch(IndexMode) {
   24889             :         case GF_SG_FIELD_CODING_IN:
   24890           0 :                 *allField = MeshGrid_In2All[inField];
   24891           0 :                 return GF_OK;
   24892             :         case GF_SG_FIELD_CODING_DEF:
   24893           0 :                 *allField = MeshGrid_Def2All[inField];
   24894           0 :                 return GF_OK;
   24895             :         case GF_SG_FIELD_CODING_OUT:
   24896           0 :                 *allField = MeshGrid_Out2All[inField];
   24897           0 :                 return GF_OK;
   24898             :         case GF_SG_FIELD_CODING_DYN:
   24899           0 :                 *allField = MeshGrid_Dyn2All[inField];
   24900           0 :                 return GF_OK;
   24901             :         default:
   24902           0 :                 return GF_BAD_PARAM;
   24903             :         }
   24904           0 : }
   24905             : static GF_Err MeshGrid_get_field(GF_Node *node, GF_FieldInfo *info)
   24906             : {
   24907           0 :         switch (info->fieldIndex) {
   24908             :         case 0:
   24909           0 :                 info->name = "set_colorIndex";
   24910           0 :                 info->eventType = GF_SG_EVENT_IN;
   24911           0 :                 info->on_event_in = ((M_MeshGrid *)node)->on_set_colorIndex;
   24912           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24913           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->set_colorIndex;
   24914           0 :                 return GF_OK;
   24915             :         case 1:
   24916           0 :                 info->name = "set_coordIndex";
   24917           0 :                 info->eventType = GF_SG_EVENT_IN;
   24918           0 :                 info->on_event_in = ((M_MeshGrid *)node)->on_set_coordIndex;
   24919           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24920           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->set_coordIndex;
   24921           0 :                 return GF_OK;
   24922             :         case 2:
   24923           0 :                 info->name = "set_normalIndex";
   24924           0 :                 info->eventType = GF_SG_EVENT_IN;
   24925           0 :                 info->on_event_in = ((M_MeshGrid *)node)->on_set_normalIndex;
   24926           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24927           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->set_normalIndex;
   24928           0 :                 return GF_OK;
   24929             :         case 3:
   24930           0 :                 info->name = "set_texCoordIndex";
   24931           0 :                 info->eventType = GF_SG_EVENT_IN;
   24932           0 :                 info->on_event_in = ((M_MeshGrid *)node)->on_set_texCoordIndex;
   24933           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24934           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->set_texCoordIndex;
   24935           0 :                 return GF_OK;
   24936             :         case 4:
   24937           0 :                 info->name = "color";
   24938           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24939           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24940           0 :                 info->NDTtype = NDT_SFColorNode;
   24941           0 :                 info->far_ptr = & ((M_MeshGrid *)node)->color;
   24942           0 :                 return GF_OK;
   24943             :         case 5:
   24944           0 :                 info->name = "coord";
   24945           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24946           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24947           0 :                 info->NDTtype = NDT_SFCoordinateNode;
   24948           0 :                 info->far_ptr = & ((M_MeshGrid *)node)->coord;
   24949           0 :                 return GF_OK;
   24950             :         case 6:
   24951           0 :                 info->name = "displayLevel";
   24952           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24953           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   24954           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->displayLevel;
   24955           0 :                 return GF_OK;
   24956             :         case 7:
   24957           0 :                 info->name = "filterType";
   24958           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24959           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   24960           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->filterType;
   24961           0 :                 return GF_OK;
   24962             :         case 8:
   24963           0 :                 info->name = "gridCoord";
   24964           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24965           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24966           0 :                 info->NDTtype = NDT_SFCoordinateNode;
   24967           0 :                 info->far_ptr = & ((M_MeshGrid *)node)->gridCoord;
   24968           0 :                 return GF_OK;
   24969             :         case 9:
   24970           0 :                 info->name = "hierarchicalLevel";
   24971           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24972           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   24973           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->hierarchicalLevel;
   24974           0 :                 return GF_OK;
   24975             :         case 10:
   24976           0 :                 info->name = "nLevels";
   24977           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24978           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24979           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->nLevels;
   24980           0 :                 return GF_OK;
   24981             :         case 11:
   24982           0 :                 info->name = "normal";
   24983           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24984           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24985           0 :                 info->NDTtype = NDT_SFNormalNode;
   24986           0 :                 info->far_ptr = & ((M_MeshGrid *)node)->normal;
   24987           0 :                 return GF_OK;
   24988             :         case 12:
   24989           0 :                 info->name = "nSlices";
   24990           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24991           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24992           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->nSlices;
   24993           0 :                 return GF_OK;
   24994             :         case 13:
   24995           0 :                 info->name = "texCoord";
   24996           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24997           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24998           0 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   24999           0 :                 info->far_ptr = & ((M_MeshGrid *)node)->texCoord;
   25000           0 :                 return GF_OK;
   25001             :         case 14:
   25002           0 :                 info->name = "vertexOffset";
   25003           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25004           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25005           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->vertexOffset;
   25006           0 :                 return GF_OK;
   25007             :         case 15:
   25008           0 :                 info->name = "vertexLink";
   25009           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25010           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25011           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->vertexLink;
   25012           0 :                 return GF_OK;
   25013             :         case 16:
   25014           0 :                 info->name = "colorIndex";
   25015           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25016           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25017           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->colorIndex;
   25018           0 :                 return GF_OK;
   25019             :         case 17:
   25020           0 :                 info->name = "coordIndex";
   25021           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25022           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25023           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->coordIndex;
   25024           0 :                 return GF_OK;
   25025             :         case 18:
   25026           0 :                 info->name = "normalIndex";
   25027           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25028           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25029           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->normalIndex;
   25030           0 :                 return GF_OK;
   25031             :         case 19:
   25032           0 :                 info->name = "solid";
   25033           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25034           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25035           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->solid;
   25036           0 :                 return GF_OK;
   25037             :         case 20:
   25038           0 :                 info->name = "texCoordIndex";
   25039           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25040           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25041           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->texCoordIndex;
   25042           0 :                 return GF_OK;
   25043             :         case 21:
   25044           0 :                 info->name = "isLoading";
   25045           0 :                 info->eventType = GF_SG_EVENT_OUT;
   25046           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25047           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->isLoading;
   25048           0 :                 return GF_OK;
   25049             :         case 22:
   25050           0 :                 info->name = "nVertices";
   25051           0 :                 info->eventType = GF_SG_EVENT_OUT;
   25052           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25053           0 :                 info->far_ptr = & ((M_MeshGrid *) node)->nVertices;
   25054           0 :                 return GF_OK;
   25055             :         default:
   25056           0 :                 return GF_BAD_PARAM;
   25057             :         }
   25058           0 : }
   25059             : 
   25060             : 
   25061             : static s32 MeshGrid_get_field_index_by_name(char *name)
   25062             : {
   25063           0 :         if (!strcmp("set_colorIndex", name)) return 0;
   25064           0 :         if (!strcmp("set_coordIndex", name)) return 1;
   25065           0 :         if (!strcmp("set_normalIndex", name)) return 2;
   25066           0 :         if (!strcmp("set_texCoordIndex", name)) return 3;
   25067           0 :         if (!strcmp("color", name)) return 4;
   25068           0 :         if (!strcmp("coord", name)) return 5;
   25069           0 :         if (!strcmp("displayLevel", name)) return 6;
   25070           0 :         if (!strcmp("filterType", name)) return 7;
   25071           0 :         if (!strcmp("gridCoord", name)) return 8;
   25072           0 :         if (!strcmp("hierarchicalLevel", name)) return 9;
   25073           0 :         if (!strcmp("nLevels", name)) return 10;
   25074           0 :         if (!strcmp("normal", name)) return 11;
   25075           0 :         if (!strcmp("nSlices", name)) return 12;
   25076           0 :         if (!strcmp("texCoord", name)) return 13;
   25077           0 :         if (!strcmp("vertexOffset", name)) return 14;
   25078           0 :         if (!strcmp("vertexLink", name)) return 15;
   25079           0 :         if (!strcmp("colorIndex", name)) return 16;
   25080           0 :         if (!strcmp("coordIndex", name)) return 17;
   25081           0 :         if (!strcmp("normalIndex", name)) return 18;
   25082           0 :         if (!strcmp("solid", name)) return 19;
   25083           0 :         if (!strcmp("texCoordIndex", name)) return 20;
   25084           0 :         if (!strcmp("isLoading", name)) return 21;
   25085           0 :         if (!strcmp("nVertices", name)) return 22;
   25086           0 :         return -1;
   25087           0 : }
   25088             : static Bool MeshGrid_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25089             : {
   25090           0 :         switch (FieldIndex) {
   25091             :         case 6:
   25092           0 :                 *AType = 13;
   25093           0 :                 *QType = 13;
   25094           0 :                 *QT13_bits = 32;
   25095           0 :                 *b_min = FLT2FIX(0);
   25096           0 :                 *b_max = FIX_MAX;
   25097           0 :                 return 1;
   25098             :         case 7:
   25099           0 :                 *AType = 13;
   25100           0 :                 *QType = 13;
   25101           0 :                 *QT13_bits = 2;
   25102           0 :                 *b_min = FLT2FIX(0);
   25103           0 :                 *b_max = FLT2FIX( 1);
   25104           0 :                 return 1;
   25105             :         case 9:
   25106           0 :                 *AType = 13;
   25107           0 :                 *QType = 13;
   25108           0 :                 *QT13_bits = 32;
   25109           0 :                 *b_min = FLT2FIX(-1);
   25110           0 :                 *b_max = FIX_MAX;
   25111           0 :                 return 1;
   25112             :         case 10:
   25113           0 :                 *AType = 7;
   25114           0 :                 *QType = 7;
   25115           0 :                 return 1;
   25116             :         case 12:
   25117           0 :                 *AType = 7;
   25118           0 :                 *QType = 7;
   25119           0 :                 return 1;
   25120             :         case 14:
   25121           0 :                 *AType = 7;
   25122           0 :                 *QType = 7;
   25123           0 :                 *b_min = FLT2FIX(0.0);
   25124           0 :                 *b_max = FLT2FIX( 2.0);
   25125           0 :                 return 1;
   25126             :         case 15:
   25127           0 :                 *AType = 0;
   25128           0 :                 *QType = 13;
   25129           0 :                 *QT13_bits = 2;
   25130           0 :                 *b_min = FLT2FIX(0);
   25131           0 :                 *b_max = FLT2FIX( 3);
   25132           0 :                 return 1;
   25133             :         case 16:
   25134           0 :                 *AType = 0;
   25135           0 :                 *QType = 14;
   25136           0 :                 *b_min = FLT2FIX(-1);
   25137           0 :                 *b_max = FIX_MAX;
   25138           0 :                 return 1;
   25139             :         case 17:
   25140           0 :                 *AType = 0;
   25141           0 :                 *QType = 14;
   25142           0 :                 *b_min = FLT2FIX(-1);
   25143           0 :                 *b_max = FIX_MAX;
   25144           0 :                 return 1;
   25145             :         case 18:
   25146           0 :                 *AType = 0;
   25147           0 :                 *QType = 14;
   25148           0 :                 *b_min = FLT2FIX(-1);
   25149           0 :                 *b_max = FIX_MAX;
   25150           0 :                 return 1;
   25151             :         case 20:
   25152           0 :                 *AType = 0;
   25153           0 :                 *QType = 14;
   25154           0 :                 *b_min = FLT2FIX(-1);
   25155           0 :                 *b_max = FIX_MAX;
   25156           0 :                 return 1;
   25157             :         default:
   25158           0 :                 return 0;
   25159             :         }
   25160           0 : }
   25161             : 
   25162             : 
   25163             : 
   25164             : GF_Node *MeshGrid_Create()
   25165             : {
   25166             :         M_MeshGrid *p;
   25167           0 :         GF_SAFEALLOC(p, M_MeshGrid);
   25168           0 :         if(!p) return NULL;
   25169           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MeshGrid);
   25170             : 
   25171             :         /*default field values*/
   25172           0 :         p->displayLevel = 0;
   25173           0 :         p->filterType = 0;
   25174           0 :         p->hierarchicalLevel = 0;
   25175           0 :         p->solid = 1;
   25176           0 :         return (GF_Node *)p;
   25177           0 : }
   25178             : 
   25179             : 
   25180             : /*
   25181             :         NonLinearDeformer Node deletion
   25182             : */
   25183             : 
   25184             : static void NonLinearDeformer_Del(GF_Node *node)
   25185             : {
   25186          46 :         M_NonLinearDeformer *p = (M_NonLinearDeformer *) node;
   25187          23 :         gf_sg_mffloat_del(p->extend);
   25188          23 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   25189          23 :         gf_node_free((GF_Node *) p);
   25190          23 : }
   25191             : 
   25192             : static const u16 NonLinearDeformer_Def2All[] = { 0, 1, 2, 3, 4};
   25193             : static const u16 NonLinearDeformer_In2All[] = { 0, 1, 2, 3, 4};
   25194             : static const u16 NonLinearDeformer_Out2All[] = { 0, 1, 2, 3, 4};
   25195             : 
   25196             : static u32 NonLinearDeformer_get_field_count(GF_Node *node, u8 IndexMode)
   25197             : {
   25198          56 :         switch(IndexMode) {
   25199             :         case GF_SG_FIELD_CODING_IN:
   25200           9 :                 return 5;
   25201             :         case GF_SG_FIELD_CODING_DEF:
   25202           9 :                 return 5;
   25203             :         case GF_SG_FIELD_CODING_OUT:
   25204           0 :                 return 5;
   25205             :         case GF_SG_FIELD_CODING_DYN:
   25206           0 :                 return 0;
   25207             :         default:
   25208          10 :                 return 5;
   25209             :         }
   25210          28 : }
   25211             : 
   25212             : static GF_Err NonLinearDeformer_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25213             : {
   25214          86 :         switch(IndexMode) {
   25215             :         case GF_SG_FIELD_CODING_IN:
   25216          13 :                 *allField = NonLinearDeformer_In2All[inField];
   25217          13 :                 return GF_OK;
   25218             :         case GF_SG_FIELD_CODING_DEF:
   25219          30 :                 *allField = NonLinearDeformer_Def2All[inField];
   25220          30 :                 return GF_OK;
   25221             :         case GF_SG_FIELD_CODING_OUT:
   25222           0 :                 *allField = NonLinearDeformer_Out2All[inField];
   25223           0 :                 return GF_OK;
   25224             :         default:
   25225           0 :                 return GF_BAD_PARAM;
   25226             :         }
   25227          43 : }
   25228             : static GF_Err NonLinearDeformer_get_field(GF_Node *node, GF_FieldInfo *info)
   25229             : {
   25230         356 :         switch (info->fieldIndex) {
   25231             :         case 0:
   25232          39 :                 info->name = "axis";
   25233          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25234          39 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   25235          39 :                 info->far_ptr = & ((M_NonLinearDeformer *) node)->axis;
   25236          39 :                 return GF_OK;
   25237             :         case 1:
   25238          39 :                 info->name = "extend";
   25239          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25240          39 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25241          39 :                 info->far_ptr = & ((M_NonLinearDeformer *) node)->extend;
   25242          39 :                 return GF_OK;
   25243             :         case 2:
   25244          27 :                 info->name = "geometry";
   25245          27 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25246          27 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25247          27 :                 info->NDTtype = NDT_SFGeometryNode;
   25248          27 :                 info->far_ptr = & ((M_NonLinearDeformer *)node)->geometry;
   25249          27 :                 return GF_OK;
   25250             :         case 3:
   25251          47 :                 info->name = "param";
   25252          47 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25253          47 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   25254          47 :                 info->far_ptr = & ((M_NonLinearDeformer *) node)->param;
   25255          47 :                 return GF_OK;
   25256             :         case 4:
   25257          26 :                 info->name = "type";
   25258          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25259          26 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25260          26 :                 info->far_ptr = & ((M_NonLinearDeformer *) node)->type;
   25261          26 :                 return GF_OK;
   25262             :         default:
   25263           0 :                 return GF_BAD_PARAM;
   25264             :         }
   25265         178 : }
   25266             : 
   25267             : 
   25268             : static s32 NonLinearDeformer_get_field_index_by_name(char *name)
   25269             : {
   25270          48 :         if (!strcmp("axis", name)) return 0;
   25271          22 :         if (!strcmp("extend", name)) return 1;
   25272          18 :         if (!strcmp("geometry", name)) return 2;
   25273          18 :         if (!strcmp("param", name)) return 3;
   25274           4 :         if (!strcmp("type", name)) return 4;
   25275           0 :         return -1;
   25276          22 : }
   25277             : static Bool NonLinearDeformer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25278             : {
   25279             :         switch (FieldIndex) {
   25280             :         default:
   25281           0 :                 return 0;
   25282             :         }
   25283             : }
   25284             : 
   25285             : 
   25286             : 
   25287             : GF_Node *NonLinearDeformer_Create()
   25288             : {
   25289             :         M_NonLinearDeformer *p;
   25290          69 :         GF_SAFEALLOC(p, M_NonLinearDeformer);
   25291          23 :         if(!p) return NULL;
   25292          23 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NonLinearDeformer);
   25293             : 
   25294             :         /*default field values*/
   25295          23 :         p->axis.x = FLT2FIX(0);
   25296          23 :         p->axis.y = FLT2FIX(0);
   25297          23 :         p->axis.z = FLT2FIX(1);
   25298          23 :         p->param = FLT2FIX(0);
   25299          23 :         p->type = 0;
   25300          23 :         return (GF_Node *)p;
   25301          23 : }
   25302             : 
   25303             : 
   25304             : /*
   25305             :         NurbsCurve Node deletion
   25306             : */
   25307             : 
   25308             : static void NurbsCurve_Del(GF_Node *node)
   25309             : {
   25310           0 :         M_NurbsCurve *p = (M_NurbsCurve *) node;
   25311           0 :         gf_sg_mfint32_del(p->set_colorIndex);
   25312           0 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   25313           0 :         gf_sg_mfvec4f_del(p->controlPoint);
   25314           0 :         gf_sg_mfint32_del(p->colorIndex);
   25315           0 :         gf_sg_mffloat_del(p->knot);
   25316           0 :         gf_node_free((GF_Node *) p);
   25317           0 : }
   25318             : 
   25319             : static const u16 NurbsCurve_Def2All[] = { 1, 2, 3, 4, 5, 6, 7};
   25320             : static const u16 NurbsCurve_In2All[] = { 0, 1, 2, 3};
   25321             : static const u16 NurbsCurve_Out2All[] = { 1, 2, 3};
   25322             : static const u16 NurbsCurve_Dyn2All[] = { 2};
   25323             : 
   25324             : static u32 NurbsCurve_get_field_count(GF_Node *node, u8 IndexMode)
   25325             : {
   25326           0 :         switch(IndexMode) {
   25327             :         case GF_SG_FIELD_CODING_IN:
   25328           0 :                 return 4;
   25329             :         case GF_SG_FIELD_CODING_DEF:
   25330           0 :                 return 7;
   25331             :         case GF_SG_FIELD_CODING_OUT:
   25332           0 :                 return 3;
   25333             :         case GF_SG_FIELD_CODING_DYN:
   25334           0 :                 return 1;
   25335             :         default:
   25336           0 :                 return 8;
   25337             :         }
   25338           0 : }
   25339             : 
   25340             : static GF_Err NurbsCurve_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25341             : {
   25342           0 :         switch(IndexMode) {
   25343             :         case GF_SG_FIELD_CODING_IN:
   25344           0 :                 *allField = NurbsCurve_In2All[inField];
   25345           0 :                 return GF_OK;
   25346             :         case GF_SG_FIELD_CODING_DEF:
   25347           0 :                 *allField = NurbsCurve_Def2All[inField];
   25348           0 :                 return GF_OK;
   25349             :         case GF_SG_FIELD_CODING_OUT:
   25350           0 :                 *allField = NurbsCurve_Out2All[inField];
   25351           0 :                 return GF_OK;
   25352             :         case GF_SG_FIELD_CODING_DYN:
   25353           0 :                 *allField = NurbsCurve_Dyn2All[inField];
   25354           0 :                 return GF_OK;
   25355             :         default:
   25356           0 :                 return GF_BAD_PARAM;
   25357             :         }
   25358           0 : }
   25359             : static GF_Err NurbsCurve_get_field(GF_Node *node, GF_FieldInfo *info)
   25360             : {
   25361           0 :         switch (info->fieldIndex) {
   25362             :         case 0:
   25363           0 :                 info->name = "set_colorIndex";
   25364           0 :                 info->eventType = GF_SG_EVENT_IN;
   25365           0 :                 info->on_event_in = ((M_NurbsCurve *)node)->on_set_colorIndex;
   25366           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25367           0 :                 info->far_ptr = & ((M_NurbsCurve *) node)->set_colorIndex;
   25368           0 :                 return GF_OK;
   25369             :         case 1:
   25370           0 :                 info->name = "color";
   25371           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25372           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25373           0 :                 info->NDTtype = NDT_SFColorNode;
   25374           0 :                 info->far_ptr = & ((M_NurbsCurve *)node)->color;
   25375           0 :                 return GF_OK;
   25376             :         case 2:
   25377           0 :                 info->name = "controlPoint";
   25378           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25379           0 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   25380           0 :                 info->far_ptr = & ((M_NurbsCurve *) node)->controlPoint;
   25381           0 :                 return GF_OK;
   25382             :         case 3:
   25383           0 :                 info->name = "tessellation";
   25384           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25385           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25386           0 :                 info->far_ptr = & ((M_NurbsCurve *) node)->tessellation;
   25387           0 :                 return GF_OK;
   25388             :         case 4:
   25389           0 :                 info->name = "colorIndex";
   25390           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25391           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25392           0 :                 info->far_ptr = & ((M_NurbsCurve *) node)->colorIndex;
   25393           0 :                 return GF_OK;
   25394             :         case 5:
   25395           0 :                 info->name = "colorPerVertex";
   25396           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25397           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25398           0 :                 info->far_ptr = & ((M_NurbsCurve *) node)->colorPerVertex;
   25399           0 :                 return GF_OK;
   25400             :         case 6:
   25401           0 :                 info->name = "knot";
   25402           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25403           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25404           0 :                 info->far_ptr = & ((M_NurbsCurve *) node)->knot;
   25405           0 :                 return GF_OK;
   25406             :         case 7:
   25407           0 :                 info->name = "order";
   25408           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25409           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25410           0 :                 info->far_ptr = & ((M_NurbsCurve *) node)->order;
   25411           0 :                 return GF_OK;
   25412             :         default:
   25413           0 :                 return GF_BAD_PARAM;
   25414             :         }
   25415           0 : }
   25416             : 
   25417             : 
   25418             : static s32 NurbsCurve_get_field_index_by_name(char *name)
   25419             : {
   25420           0 :         if (!strcmp("set_colorIndex", name)) return 0;
   25421           0 :         if (!strcmp("color", name)) return 1;
   25422           0 :         if (!strcmp("controlPoint", name)) return 2;
   25423           0 :         if (!strcmp("tessellation", name)) return 3;
   25424           0 :         if (!strcmp("colorIndex", name)) return 4;
   25425           0 :         if (!strcmp("colorPerVertex", name)) return 5;
   25426           0 :         if (!strcmp("knot", name)) return 6;
   25427           0 :         if (!strcmp("order", name)) return 7;
   25428           0 :         return -1;
   25429           0 : }
   25430             : static Bool NurbsCurve_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25431             : {
   25432           0 :         switch (FieldIndex) {
   25433             :         case 2:
   25434           0 :                 *AType = 15;
   25435           0 :                 *QType = 15;
   25436           0 :                 *b_min = FIX_MIN;
   25437           0 :                 *b_max = FIX_MAX;
   25438           0 :                 return 1;
   25439             :         case 4:
   25440           0 :                 *AType = 0;
   25441           0 :                 *QType = 14;
   25442           0 :                 return 1;
   25443             :         case 7:
   25444           0 :                 *AType = 0;
   25445           0 :                 *QType = 13;
   25446           0 :                 *QT13_bits = 5;
   25447           0 :                 *b_min = FLT2FIX(3);
   25448           0 :                 *b_max = FLT2FIX(34);
   25449           0 :                 return 1;
   25450             :         default:
   25451           0 :                 return 0;
   25452             :         }
   25453           0 : }
   25454             : 
   25455             : 
   25456             : 
   25457             : GF_Node *NurbsCurve_Create()
   25458             : {
   25459             :         M_NurbsCurve *p;
   25460           0 :         GF_SAFEALLOC(p, M_NurbsCurve);
   25461           0 :         if(!p) return NULL;
   25462           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NurbsCurve);
   25463             : 
   25464             :         /*default field values*/
   25465           0 :         p->tessellation = 0;
   25466           0 :         p->colorPerVertex = 1;
   25467           0 :         p->order = 4;
   25468           0 :         return (GF_Node *)p;
   25469           0 : }
   25470             : 
   25471             : 
   25472             : /*
   25473             :         NurbsCurve2D Node deletion
   25474             : */
   25475             : 
   25476             : static void NurbsCurve2D_Del(GF_Node *node)
   25477             : {
   25478           0 :         M_NurbsCurve2D *p = (M_NurbsCurve2D *) node;
   25479           0 :         gf_sg_mfint32_del(p->set_colorIndex);
   25480           0 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   25481           0 :         gf_sg_mfvec3f_del(p->controlPoint);
   25482           0 :         gf_sg_mfint32_del(p->colorIndex);
   25483           0 :         gf_sg_mffloat_del(p->knot);
   25484           0 :         gf_node_free((GF_Node *) p);
   25485           0 : }
   25486             : 
   25487             : static const u16 NurbsCurve2D_Def2All[] = { 1, 2, 3, 4, 5, 6, 7};
   25488             : static const u16 NurbsCurve2D_In2All[] = { 0, 1, 2, 3};
   25489             : static const u16 NurbsCurve2D_Out2All[] = { 1, 2, 3};
   25490             : static const u16 NurbsCurve2D_Dyn2All[] = { 2};
   25491             : 
   25492             : static u32 NurbsCurve2D_get_field_count(GF_Node *node, u8 IndexMode)
   25493             : {
   25494           0 :         switch(IndexMode) {
   25495             :         case GF_SG_FIELD_CODING_IN:
   25496           0 :                 return 4;
   25497             :         case GF_SG_FIELD_CODING_DEF:
   25498           0 :                 return 7;
   25499             :         case GF_SG_FIELD_CODING_OUT:
   25500           0 :                 return 3;
   25501             :         case GF_SG_FIELD_CODING_DYN:
   25502           0 :                 return 1;
   25503             :         default:
   25504           0 :                 return 8;
   25505             :         }
   25506           0 : }
   25507             : 
   25508             : static GF_Err NurbsCurve2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25509             : {
   25510           0 :         switch(IndexMode) {
   25511             :         case GF_SG_FIELD_CODING_IN:
   25512           0 :                 *allField = NurbsCurve2D_In2All[inField];
   25513           0 :                 return GF_OK;
   25514             :         case GF_SG_FIELD_CODING_DEF:
   25515           0 :                 *allField = NurbsCurve2D_Def2All[inField];
   25516           0 :                 return GF_OK;
   25517             :         case GF_SG_FIELD_CODING_OUT:
   25518           0 :                 *allField = NurbsCurve2D_Out2All[inField];
   25519           0 :                 return GF_OK;
   25520             :         case GF_SG_FIELD_CODING_DYN:
   25521           0 :                 *allField = NurbsCurve2D_Dyn2All[inField];
   25522           0 :                 return GF_OK;
   25523             :         default:
   25524           0 :                 return GF_BAD_PARAM;
   25525             :         }
   25526           0 : }
   25527             : static GF_Err NurbsCurve2D_get_field(GF_Node *node, GF_FieldInfo *info)
   25528             : {
   25529           0 :         switch (info->fieldIndex) {
   25530             :         case 0:
   25531           0 :                 info->name = "set_colorIndex";
   25532           0 :                 info->eventType = GF_SG_EVENT_IN;
   25533           0 :                 info->on_event_in = ((M_NurbsCurve2D *)node)->on_set_colorIndex;
   25534           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25535           0 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->set_colorIndex;
   25536           0 :                 return GF_OK;
   25537             :         case 1:
   25538           0 :                 info->name = "color";
   25539           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25540           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25541           0 :                 info->NDTtype = NDT_SFColorNode;
   25542           0 :                 info->far_ptr = & ((M_NurbsCurve2D *)node)->color;
   25543           0 :                 return GF_OK;
   25544             :         case 2:
   25545           0 :                 info->name = "controlPoint";
   25546           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25547           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   25548           0 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->controlPoint;
   25549           0 :                 return GF_OK;
   25550             :         case 3:
   25551           0 :                 info->name = "tessellation";
   25552           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25553           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25554           0 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->tessellation;
   25555           0 :                 return GF_OK;
   25556             :         case 4:
   25557           0 :                 info->name = "colorIndex";
   25558           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25559           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25560           0 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->colorIndex;
   25561           0 :                 return GF_OK;
   25562             :         case 5:
   25563           0 :                 info->name = "colorPerVertex";
   25564           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25565           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25566           0 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->colorPerVertex;
   25567           0 :                 return GF_OK;
   25568             :         case 6:
   25569           0 :                 info->name = "knot";
   25570           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25571           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25572           0 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->knot;
   25573           0 :                 return GF_OK;
   25574             :         case 7:
   25575           0 :                 info->name = "order";
   25576           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25577           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25578           0 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->order;
   25579           0 :                 return GF_OK;
   25580             :         default:
   25581           0 :                 return GF_BAD_PARAM;
   25582             :         }
   25583           0 : }
   25584             : 
   25585             : 
   25586             : static s32 NurbsCurve2D_get_field_index_by_name(char *name)
   25587             : {
   25588           0 :         if (!strcmp("set_colorIndex", name)) return 0;
   25589           0 :         if (!strcmp("color", name)) return 1;
   25590           0 :         if (!strcmp("controlPoint", name)) return 2;
   25591           0 :         if (!strcmp("tessellation", name)) return 3;
   25592           0 :         if (!strcmp("colorIndex", name)) return 4;
   25593           0 :         if (!strcmp("colorPerVertex", name)) return 5;
   25594           0 :         if (!strcmp("knot", name)) return 6;
   25595           0 :         if (!strcmp("order", name)) return 7;
   25596           0 :         return -1;
   25597           0 : }
   25598             : static Bool NurbsCurve2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25599             : {
   25600           0 :         switch (FieldIndex) {
   25601             :         case 2:
   25602           0 :                 *AType = 2;
   25603           0 :                 *QType = 2;
   25604           0 :                 *b_min = FIX_MIN;
   25605           0 :                 *b_max = FIX_MAX;
   25606           0 :                 return 1;
   25607             :         case 4:
   25608           0 :                 *AType = 0;
   25609           0 :                 *QType = 14;
   25610           0 :                 return 1;
   25611             :         case 7:
   25612           0 :                 *AType = 0;
   25613           0 :                 *QType = 13;
   25614           0 :                 *QT13_bits = 5;
   25615           0 :                 *b_min = FLT2FIX(3);
   25616           0 :                 *b_max = FLT2FIX(34);
   25617           0 :                 return 1;
   25618             :         default:
   25619           0 :                 return 0;
   25620             :         }
   25621           0 : }
   25622             : 
   25623             : 
   25624             : 
   25625             : GF_Node *NurbsCurve2D_Create()
   25626             : {
   25627             :         M_NurbsCurve2D *p;
   25628           0 :         GF_SAFEALLOC(p, M_NurbsCurve2D);
   25629           0 :         if(!p) return NULL;
   25630           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NurbsCurve2D);
   25631             : 
   25632             :         /*default field values*/
   25633           0 :         p->tessellation = 0;
   25634           0 :         p->colorPerVertex = 1;
   25635           0 :         p->order = 4;
   25636           0 :         return (GF_Node *)p;
   25637           0 : }
   25638             : 
   25639             : 
   25640             : /*
   25641             :         NurbsSurface Node deletion
   25642             : */
   25643             : 
   25644             : static void NurbsSurface_Del(GF_Node *node)
   25645             : {
   25646           0 :         M_NurbsSurface *p = (M_NurbsSurface *) node;
   25647           0 :         gf_sg_mfint32_del(p->set_colorIndex);
   25648           0 :         gf_sg_mfint32_del(p->set_texColorIndex);
   25649           0 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   25650           0 :         gf_sg_mfvec4f_del(p->controlPoint);
   25651           0 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
   25652           0 :         gf_sg_mfint32_del(p->colorIndex);
   25653           0 :         gf_sg_mfint32_del(p->texColorIndex);
   25654           0 :         gf_sg_mffloat_del(p->uKnot);
   25655           0 :         gf_sg_mffloat_del(p->vKnot);
   25656           0 :         gf_node_free((GF_Node *) p);
   25657           0 : }
   25658             : 
   25659             : static const u16 NurbsSurface_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
   25660             : static const u16 NurbsSurface_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   25661             : static const u16 NurbsSurface_Out2All[] = { 2, 3, 4, 5, 6};
   25662             : static const u16 NurbsSurface_Dyn2All[] = { 3};
   25663             : 
   25664             : static u32 NurbsSurface_get_field_count(GF_Node *node, u8 IndexMode)
   25665             : {
   25666           0 :         switch(IndexMode) {
   25667             :         case GF_SG_FIELD_CODING_IN:
   25668           0 :                 return 7;
   25669             :         case GF_SG_FIELD_CODING_DEF:
   25670           0 :                 return 16;
   25671             :         case GF_SG_FIELD_CODING_OUT:
   25672           0 :                 return 5;
   25673             :         case GF_SG_FIELD_CODING_DYN:
   25674           0 :                 return 1;
   25675             :         default:
   25676           0 :                 return 18;
   25677             :         }
   25678           0 : }
   25679             : 
   25680             : static GF_Err NurbsSurface_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25681             : {
   25682           0 :         switch(IndexMode) {
   25683             :         case GF_SG_FIELD_CODING_IN:
   25684           0 :                 *allField = NurbsSurface_In2All[inField];
   25685           0 :                 return GF_OK;
   25686             :         case GF_SG_FIELD_CODING_DEF:
   25687           0 :                 *allField = NurbsSurface_Def2All[inField];
   25688           0 :                 return GF_OK;
   25689             :         case GF_SG_FIELD_CODING_OUT:
   25690           0 :                 *allField = NurbsSurface_Out2All[inField];
   25691           0 :                 return GF_OK;
   25692             :         case GF_SG_FIELD_CODING_DYN:
   25693           0 :                 *allField = NurbsSurface_Dyn2All[inField];
   25694           0 :                 return GF_OK;
   25695             :         default:
   25696           0 :                 return GF_BAD_PARAM;
   25697             :         }
   25698           0 : }
   25699             : static GF_Err NurbsSurface_get_field(GF_Node *node, GF_FieldInfo *info)
   25700             : {
   25701           0 :         switch (info->fieldIndex) {
   25702             :         case 0:
   25703           0 :                 info->name = "set_colorIndex";
   25704           0 :                 info->eventType = GF_SG_EVENT_IN;
   25705           0 :                 info->on_event_in = ((M_NurbsSurface *)node)->on_set_colorIndex;
   25706           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25707           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->set_colorIndex;
   25708           0 :                 return GF_OK;
   25709             :         case 1:
   25710           0 :                 info->name = "set_texColorIndex";
   25711           0 :                 info->eventType = GF_SG_EVENT_IN;
   25712           0 :                 info->on_event_in = ((M_NurbsSurface *)node)->on_set_texColorIndex;
   25713           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25714           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->set_texColorIndex;
   25715           0 :                 return GF_OK;
   25716             :         case 2:
   25717           0 :                 info->name = "color";
   25718           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25719           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25720           0 :                 info->NDTtype = NDT_SFColorNode;
   25721           0 :                 info->far_ptr = & ((M_NurbsSurface *)node)->color;
   25722           0 :                 return GF_OK;
   25723             :         case 3:
   25724           0 :                 info->name = "controlPoint";
   25725           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25726           0 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   25727           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->controlPoint;
   25728           0 :                 return GF_OK;
   25729             :         case 4:
   25730           0 :                 info->name = "texCoord";
   25731           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25732           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25733           0 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   25734           0 :                 info->far_ptr = & ((M_NurbsSurface *)node)->texCoord;
   25735           0 :                 return GF_OK;
   25736             :         case 5:
   25737           0 :                 info->name = "uTessellation";
   25738           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25739           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25740           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->uTessellation;
   25741           0 :                 return GF_OK;
   25742             :         case 6:
   25743           0 :                 info->name = "vTessellation";
   25744           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25745           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25746           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->vTessellation;
   25747           0 :                 return GF_OK;
   25748             :         case 7:
   25749           0 :                 info->name = "ccw";
   25750           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25751           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25752           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->ccw;
   25753           0 :                 return GF_OK;
   25754             :         case 8:
   25755           0 :                 info->name = "colorIndex";
   25756           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25757           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25758           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->colorIndex;
   25759           0 :                 return GF_OK;
   25760             :         case 9:
   25761           0 :                 info->name = "colorPerVertex";
   25762           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25763           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25764           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->colorPerVertex;
   25765           0 :                 return GF_OK;
   25766             :         case 10:
   25767           0 :                 info->name = "solid";
   25768           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25769           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25770           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->solid;
   25771           0 :                 return GF_OK;
   25772             :         case 11:
   25773           0 :                 info->name = "texColorIndex";
   25774           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25775           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25776           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->texColorIndex;
   25777           0 :                 return GF_OK;
   25778             :         case 12:
   25779           0 :                 info->name = "uDimension";
   25780           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25781           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25782           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->uDimension;
   25783           0 :                 return GF_OK;
   25784             :         case 13:
   25785           0 :                 info->name = "uKnot";
   25786           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25787           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25788           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->uKnot;
   25789           0 :                 return GF_OK;
   25790             :         case 14:
   25791           0 :                 info->name = "uOrder";
   25792           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25793           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25794           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->uOrder;
   25795           0 :                 return GF_OK;
   25796             :         case 15:
   25797           0 :                 info->name = "vDimension";
   25798           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25799           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25800           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->vDimension;
   25801           0 :                 return GF_OK;
   25802             :         case 16:
   25803           0 :                 info->name = "vKnot";
   25804           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25805           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25806           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->vKnot;
   25807           0 :                 return GF_OK;
   25808             :         case 17:
   25809           0 :                 info->name = "vOrder";
   25810           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25811           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25812           0 :                 info->far_ptr = & ((M_NurbsSurface *) node)->vOrder;
   25813           0 :                 return GF_OK;
   25814             :         default:
   25815           0 :                 return GF_BAD_PARAM;
   25816             :         }
   25817           0 : }
   25818             : 
   25819             : 
   25820             : static s32 NurbsSurface_get_field_index_by_name(char *name)
   25821             : {
   25822           0 :         if (!strcmp("set_colorIndex", name)) return 0;
   25823           0 :         if (!strcmp("set_texColorIndex", name)) return 1;
   25824           0 :         if (!strcmp("color", name)) return 2;
   25825           0 :         if (!strcmp("controlPoint", name)) return 3;
   25826           0 :         if (!strcmp("texCoord", name)) return 4;
   25827           0 :         if (!strcmp("uTessellation", name)) return 5;
   25828           0 :         if (!strcmp("vTessellation", name)) return 6;
   25829           0 :         if (!strcmp("ccw", name)) return 7;
   25830           0 :         if (!strcmp("colorIndex", name)) return 8;
   25831           0 :         if (!strcmp("colorPerVertex", name)) return 9;
   25832           0 :         if (!strcmp("solid", name)) return 10;
   25833           0 :         if (!strcmp("texColorIndex", name)) return 11;
   25834           0 :         if (!strcmp("uDimension", name)) return 12;
   25835           0 :         if (!strcmp("uKnot", name)) return 13;
   25836           0 :         if (!strcmp("uOrder", name)) return 14;
   25837           0 :         if (!strcmp("vDimension", name)) return 15;
   25838           0 :         if (!strcmp("vKnot", name)) return 16;
   25839           0 :         if (!strcmp("vOrder", name)) return 17;
   25840           0 :         return -1;
   25841           0 : }
   25842             : static Bool NurbsSurface_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25843             : {
   25844           0 :         switch (FieldIndex) {
   25845             :         case 3:
   25846           0 :                 *AType = 15;
   25847           0 :                 *QType = 15;
   25848           0 :                 *b_min = FIX_MIN;
   25849           0 :                 *b_max = FIX_MAX;
   25850           0 :                 return 1;
   25851             :         case 8:
   25852           0 :                 *AType = 0;
   25853           0 :                 *QType = 14;
   25854           0 :                 return 1;
   25855             :         case 11:
   25856           0 :                 *AType = 0;
   25857           0 :                 *QType = 14;
   25858           0 :                 return 1;
   25859             :         case 12:
   25860           0 :                 *AType = 0;
   25861           0 :                 *QType = 13;
   25862           0 :                 *QT13_bits = 8;
   25863           0 :                 *b_min = FLT2FIX(3);
   25864           0 :                 *b_max = FLT2FIX(258);
   25865           0 :                 return 1;
   25866             :         case 14:
   25867           0 :                 *AType = 0;
   25868           0 :                 *QType = 13;
   25869           0 :                 *QT13_bits = 5;
   25870           0 :                 *b_min = FLT2FIX(3);
   25871           0 :                 *b_max = FLT2FIX(34);
   25872           0 :                 return 1;
   25873             :         case 15:
   25874           0 :                 *AType = 0;
   25875           0 :                 *QType = 13;
   25876           0 :                 *QT13_bits = 8;
   25877           0 :                 *b_min = FLT2FIX(3);
   25878           0 :                 *b_max = FLT2FIX(258);
   25879           0 :                 return 1;
   25880             :         case 17:
   25881           0 :                 *AType = 0;
   25882           0 :                 *QType = 13;
   25883           0 :                 *QT13_bits = 5;
   25884           0 :                 *b_min = FLT2FIX(3);
   25885           0 :                 *b_max = FLT2FIX(34);
   25886           0 :                 return 1;
   25887             :         default:
   25888           0 :                 return 0;
   25889             :         }
   25890           0 : }
   25891             : 
   25892             : 
   25893             : 
   25894             : GF_Node *NurbsSurface_Create()
   25895             : {
   25896             :         M_NurbsSurface *p;
   25897           0 :         GF_SAFEALLOC(p, M_NurbsSurface);
   25898           0 :         if(!p) return NULL;
   25899           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NurbsSurface);
   25900             : 
   25901             :         /*default field values*/
   25902           0 :         p->uTessellation = 0;
   25903           0 :         p->vTessellation = 0;
   25904           0 :         p->ccw = 1;
   25905           0 :         p->colorPerVertex = 1;
   25906           0 :         p->solid = 1;
   25907           0 :         p->uDimension = 4;
   25908           0 :         p->uOrder = 4;
   25909           0 :         p->vDimension = 4;
   25910           0 :         p->vOrder = 4;
   25911           0 :         return (GF_Node *)p;
   25912           0 : }
   25913             : 
   25914             : 
   25915             : /*
   25916             :         OctreeImage Node deletion
   25917             : */
   25918             : 
   25919             : static void OctreeImage_Del(GF_Node *node)
   25920             : {
   25921           0 :         M_OctreeImage *p = (M_OctreeImage *) node;
   25922           0 :         gf_node_unregister_children((GF_Node *) p, p->images);
   25923           0 :         gf_sg_mfint32_del(p->octree);
   25924           0 :         gf_sg_mfint32_del(p->voxelImageIndex);
   25925           0 :         gf_node_free((GF_Node *) p);
   25926           0 : }
   25927             : 
   25928             : static const u16 OctreeImage_Def2All[] = { 0, 1, 2, 3};
   25929             : 
   25930             : static u32 OctreeImage_get_field_count(GF_Node *node, u8 IndexMode)
   25931             : {
   25932           0 :         switch(IndexMode) {
   25933             :         case GF_SG_FIELD_CODING_IN:
   25934           0 :                 return 0;
   25935             :         case GF_SG_FIELD_CODING_DEF:
   25936           0 :                 return 4;
   25937             :         case GF_SG_FIELD_CODING_OUT:
   25938           0 :                 return 0;
   25939             :         case GF_SG_FIELD_CODING_DYN:
   25940           0 :                 return 0;
   25941             :         default:
   25942           0 :                 return 4;
   25943             :         }
   25944           0 : }
   25945             : 
   25946             : static GF_Err OctreeImage_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25947             : {
   25948           0 :         switch(IndexMode) {
   25949             :         case GF_SG_FIELD_CODING_DEF:
   25950           0 :                 *allField = OctreeImage_Def2All[inField];
   25951           0 :                 return GF_OK;
   25952             :         default:
   25953           0 :                 return GF_BAD_PARAM;
   25954             :         }
   25955           0 : }
   25956             : static GF_Err OctreeImage_get_field(GF_Node *node, GF_FieldInfo *info)
   25957             : {
   25958           0 :         switch (info->fieldIndex) {
   25959             :         case 0:
   25960           0 :                 info->name = "images";
   25961           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25962           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   25963           0 :                 info->NDTtype = NDT_SFDepthImageNode;
   25964           0 :                 info->far_ptr = & ((M_OctreeImage *)node)->images;
   25965           0 :                 return GF_OK;
   25966             :         case 1:
   25967           0 :                 info->name = "octree";
   25968           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25969           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25970           0 :                 info->far_ptr = & ((M_OctreeImage *) node)->octree;
   25971           0 :                 return GF_OK;
   25972             :         case 2:
   25973           0 :                 info->name = "octreeResolution";
   25974           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25975           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25976           0 :                 info->far_ptr = & ((M_OctreeImage *) node)->octreeResolution;
   25977           0 :                 return GF_OK;
   25978             :         case 3:
   25979           0 :                 info->name = "voxelImageIndex";
   25980           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   25981           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25982           0 :                 info->far_ptr = & ((M_OctreeImage *) node)->voxelImageIndex;
   25983           0 :                 return GF_OK;
   25984             :         default:
   25985           0 :                 return GF_BAD_PARAM;
   25986             :         }
   25987           0 : }
   25988             : 
   25989             : 
   25990             : static s32 OctreeImage_get_field_index_by_name(char *name)
   25991             : {
   25992           0 :         if (!strcmp("images", name)) return 0;
   25993           0 :         if (!strcmp("octree", name)) return 1;
   25994           0 :         if (!strcmp("octreeResolution", name)) return 2;
   25995           0 :         if (!strcmp("voxelImageIndex", name)) return 3;
   25996           0 :         return -1;
   25997           0 : }
   25998             : static Bool OctreeImage_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25999             : {
   26000           0 :         switch (FieldIndex) {
   26001             :         case 1:
   26002           0 :                 *AType = 0;
   26003           0 :                 *QType = 13;
   26004           0 :                 *QT13_bits = 8;
   26005           0 :                 *b_min = FLT2FIX(0);
   26006           0 :                 *b_max = FLT2FIX(255);
   26007           0 :                 return 1;
   26008             :         case 3:
   26009           0 :                 *AType = 0;
   26010           0 :                 *QType = 13;
   26011           0 :                 *QT13_bits = 8;
   26012           0 :                 *b_min = FLT2FIX(0);
   26013           0 :                 *b_max = FLT2FIX(255);
   26014           0 :                 return 1;
   26015             :         default:
   26016           0 :                 return 0;
   26017             :         }
   26018           0 : }
   26019             : 
   26020             : 
   26021             : 
   26022             : GF_Node *OctreeImage_Create()
   26023             : {
   26024             :         M_OctreeImage *p;
   26025           0 :         GF_SAFEALLOC(p, M_OctreeImage);
   26026           0 :         if(!p) return NULL;
   26027           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_OctreeImage);
   26028             : 
   26029             :         /*default field values*/
   26030           0 :         p->octreeResolution = 256;
   26031           0 :         return (GF_Node *)p;
   26032           0 : }
   26033             : 
   26034             : 
   26035             : /*
   26036             :         XXParticles Node deletion
   26037             : */
   26038             : 
   26039             : static void XXParticles_Del(GF_Node *node)
   26040             : {
   26041           0 :         M_XXParticles *p = (M_XXParticles *) node;
   26042           0 :         gf_node_unregister_children((GF_Node *) p, p->influences);
   26043           0 :         gf_node_unregister((GF_Node *) p->init, (GF_Node *) p);
   26044           0 :         gf_node_unregister((GF_Node *) p->primitive, (GF_Node *) p);
   26045           0 :         gf_node_free((GF_Node *) p);
   26046           0 : }
   26047             : 
   26048             : static const u16 XXParticles_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
   26049             : static const u16 XXParticles_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
   26050             : static const u16 XXParticles_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
   26051             : 
   26052             : static u32 XXParticles_get_field_count(GF_Node *node, u8 IndexMode)
   26053             : {
   26054           0 :         switch(IndexMode) {
   26055             :         case GF_SG_FIELD_CODING_IN:
   26056           0 :                 return 25;
   26057             :         case GF_SG_FIELD_CODING_DEF:
   26058           0 :                 return 25;
   26059             :         case GF_SG_FIELD_CODING_OUT:
   26060           0 :                 return 25;
   26061             :         case GF_SG_FIELD_CODING_DYN:
   26062           0 :                 return 0;
   26063             :         default:
   26064           0 :                 return 25;
   26065             :         }
   26066           0 : }
   26067             : 
   26068             : static GF_Err XXParticles_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26069             : {
   26070           0 :         switch(IndexMode) {
   26071             :         case GF_SG_FIELD_CODING_IN:
   26072           0 :                 *allField = XXParticles_In2All[inField];
   26073           0 :                 return GF_OK;
   26074             :         case GF_SG_FIELD_CODING_DEF:
   26075           0 :                 *allField = XXParticles_Def2All[inField];
   26076           0 :                 return GF_OK;
   26077             :         case GF_SG_FIELD_CODING_OUT:
   26078           0 :                 *allField = XXParticles_Out2All[inField];
   26079           0 :                 return GF_OK;
   26080             :         default:
   26081           0 :                 return GF_BAD_PARAM;
   26082             :         }
   26083           0 : }
   26084             : static GF_Err XXParticles_get_field(GF_Node *node, GF_FieldInfo *info)
   26085             : {
   26086           0 :         switch (info->fieldIndex) {
   26087             :         case 0:
   26088           0 :                 info->name = "creationRate";
   26089           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26090           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26091           0 :                 info->far_ptr = & ((M_XXParticles *) node)->creationRate;
   26092           0 :                 return GF_OK;
   26093             :         case 1:
   26094           0 :                 info->name = "creationRateVariation";
   26095           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26096           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26097           0 :                 info->far_ptr = & ((M_XXParticles *) node)->creationRateVariation;
   26098           0 :                 return GF_OK;
   26099             :         case 2:
   26100           0 :                 info->name = "emitAlpha";
   26101           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26102           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26103           0 :                 info->far_ptr = & ((M_XXParticles *) node)->emitAlpha;
   26104           0 :                 return GF_OK;
   26105             :         case 3:
   26106           0 :                 info->name = "emitColor";
   26107           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26108           0 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   26109           0 :                 info->far_ptr = & ((M_XXParticles *) node)->emitColor;
   26110           0 :                 return GF_OK;
   26111             :         case 4:
   26112           0 :                 info->name = "emitColorVariation";
   26113           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26114           0 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   26115           0 :                 info->far_ptr = & ((M_XXParticles *) node)->emitColorVariation;
   26116           0 :                 return GF_OK;
   26117             :         case 5:
   26118           0 :                 info->name = "emitterPosition";
   26119           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26120           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26121           0 :                 info->far_ptr = & ((M_XXParticles *) node)->emitterPosition;
   26122           0 :                 return GF_OK;
   26123             :         case 6:
   26124           0 :                 info->name = "emitVelocity";
   26125           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26126           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26127           0 :                 info->far_ptr = & ((M_XXParticles *) node)->emitVelocity;
   26128           0 :                 return GF_OK;
   26129             :         case 7:
   26130           0 :                 info->name = "emitVelocityVariation";
   26131           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26132           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26133           0 :                 info->far_ptr = & ((M_XXParticles *) node)->emitVelocityVariation;
   26134           0 :                 return GF_OK;
   26135             :         case 8:
   26136           0 :                 info->name = "enabled";
   26137           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26138           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   26139           0 :                 info->far_ptr = & ((M_XXParticles *) node)->enabled;
   26140           0 :                 return GF_OK;
   26141             :         case 9:
   26142           0 :                 info->name = "fadeAlpha";
   26143           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26144           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26145           0 :                 info->far_ptr = & ((M_XXParticles *) node)->fadeAlpha;
   26146           0 :                 return GF_OK;
   26147             :         case 10:
   26148           0 :                 info->name = "fadeColor";
   26149           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26150           0 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   26151           0 :                 info->far_ptr = & ((M_XXParticles *) node)->fadeColor;
   26152           0 :                 return GF_OK;
   26153             :         case 11:
   26154           0 :                 info->name = "fadeRate";
   26155           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26156           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26157           0 :                 info->far_ptr = & ((M_XXParticles *) node)->fadeRate;
   26158           0 :                 return GF_OK;
   26159             :         case 12:
   26160           0 :                 info->name = "force";
   26161           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26162           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26163           0 :                 info->far_ptr = & ((M_XXParticles *) node)->force;
   26164           0 :                 return GF_OK;
   26165             :         case 13:
   26166           0 :                 info->name = "influences";
   26167           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26168           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   26169           0 :                 info->NDTtype = NDT_SFInfluenceNode;
   26170           0 :                 info->far_ptr = & ((M_XXParticles *)node)->influences;
   26171           0 :                 return GF_OK;
   26172             :         case 14:
   26173           0 :                 info->name = "init";
   26174           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26175           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   26176           0 :                 info->NDTtype = NDT_SFWorldNode;
   26177           0 :                 info->far_ptr = & ((M_XXParticles *)node)->init;
   26178           0 :                 return GF_OK;
   26179             :         case 15:
   26180           0 :                 info->name = "maxLifeTime";
   26181           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26182           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   26183           0 :                 info->far_ptr = & ((M_XXParticles *) node)->maxLifeTime;
   26184           0 :                 return GF_OK;
   26185             :         case 16:
   26186           0 :                 info->name = "maxLifeTimeVariation";
   26187           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26188           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26189           0 :                 info->far_ptr = & ((M_XXParticles *) node)->maxLifeTimeVariation;
   26190           0 :                 return GF_OK;
   26191             :         case 17:
   26192           0 :                 info->name = "maxParticles";
   26193           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26194           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26195           0 :                 info->far_ptr = & ((M_XXParticles *) node)->maxParticles;
   26196           0 :                 return GF_OK;
   26197             :         case 18:
   26198           0 :                 info->name = "minRange";
   26199           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26200           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26201           0 :                 info->far_ptr = & ((M_XXParticles *) node)->minRange;
   26202           0 :                 return GF_OK;
   26203             :         case 19:
   26204           0 :                 info->name = "maxRange";
   26205           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26206           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26207           0 :                 info->far_ptr = & ((M_XXParticles *) node)->maxRange;
   26208           0 :                 return GF_OK;
   26209             :         case 20:
   26210           0 :                 info->name = "primitive";
   26211           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26212           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   26213           0 :                 info->NDTtype = NDT_SFWorldNode;
   26214           0 :                 info->far_ptr = & ((M_XXParticles *)node)->primitive;
   26215           0 :                 return GF_OK;
   26216             :         case 21:
   26217           0 :                 info->name = "primitiveType";
   26218           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26219           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26220           0 :                 info->far_ptr = & ((M_XXParticles *) node)->primitiveType;
   26221           0 :                 return GF_OK;
   26222             :         case 22:
   26223           0 :                 info->name = "particleRadius";
   26224           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26225           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26226           0 :                 info->far_ptr = & ((M_XXParticles *) node)->particleRadius;
   26227           0 :                 return GF_OK;
   26228             :         case 23:
   26229           0 :                 info->name = "particleRadiusRate";
   26230           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26231           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26232           0 :                 info->far_ptr = & ((M_XXParticles *) node)->particleRadiusRate;
   26233           0 :                 return GF_OK;
   26234             :         case 24:
   26235           0 :                 info->name = "particleRadiusVariation";
   26236           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26237           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26238           0 :                 info->far_ptr = & ((M_XXParticles *) node)->particleRadiusVariation;
   26239           0 :                 return GF_OK;
   26240             :         default:
   26241           0 :                 return GF_BAD_PARAM;
   26242             :         }
   26243           0 : }
   26244             : 
   26245             : 
   26246             : static s32 XXParticles_get_field_index_by_name(char *name)
   26247             : {
   26248           0 :         if (!strcmp("creationRate", name)) return 0;
   26249           0 :         if (!strcmp("creationRateVariation", name)) return 1;
   26250           0 :         if (!strcmp("emitAlpha", name)) return 2;
   26251           0 :         if (!strcmp("emitColor", name)) return 3;
   26252           0 :         if (!strcmp("emitColorVariation", name)) return 4;
   26253           0 :         if (!strcmp("emitterPosition", name)) return 5;
   26254           0 :         if (!strcmp("emitVelocity", name)) return 6;
   26255           0 :         if (!strcmp("emitVelocityVariation", name)) return 7;
   26256           0 :         if (!strcmp("enabled", name)) return 8;
   26257           0 :         if (!strcmp("fadeAlpha", name)) return 9;
   26258           0 :         if (!strcmp("fadeColor", name)) return 10;
   26259           0 :         if (!strcmp("fadeRate", name)) return 11;
   26260           0 :         if (!strcmp("force", name)) return 12;
   26261           0 :         if (!strcmp("influences", name)) return 13;
   26262           0 :         if (!strcmp("init", name)) return 14;
   26263           0 :         if (!strcmp("maxLifeTime", name)) return 15;
   26264           0 :         if (!strcmp("maxLifeTimeVariation", name)) return 16;
   26265           0 :         if (!strcmp("maxParticles", name)) return 17;
   26266           0 :         if (!strcmp("minRange", name)) return 18;
   26267           0 :         if (!strcmp("maxRange", name)) return 19;
   26268           0 :         if (!strcmp("primitive", name)) return 20;
   26269           0 :         if (!strcmp("primitiveType", name)) return 21;
   26270           0 :         if (!strcmp("particleRadius", name)) return 22;
   26271           0 :         if (!strcmp("particleRadiusRate", name)) return 23;
   26272           0 :         if (!strcmp("particleRadiusVariation", name)) return 24;
   26273           0 :         return -1;
   26274           0 : }
   26275             : static Bool XXParticles_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26276             : {
   26277             :         switch (FieldIndex) {
   26278             :         default:
   26279           0 :                 return 0;
   26280             :         }
   26281             : }
   26282             : 
   26283             : 
   26284             : 
   26285             : GF_Node *XXParticles_Create()
   26286             : {
   26287             :         M_XXParticles *p;
   26288           0 :         GF_SAFEALLOC(p, M_XXParticles);
   26289           0 :         if(!p) return NULL;
   26290           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXParticles);
   26291             : 
   26292             :         /*default field values*/
   26293           0 :         p->creationRate = FLT2FIX(500);
   26294           0 :         p->creationRateVariation = FLT2FIX(0);
   26295           0 :         p->emitAlpha = FLT2FIX(1.0);
   26296           0 :         p->emitColor.red = FLT2FIX(1);
   26297           0 :         p->emitColor.green = FLT2FIX(1);
   26298           0 :         p->emitColor.blue = FLT2FIX(1);
   26299           0 :         p->emitColorVariation.red = FLT2FIX(0);
   26300           0 :         p->emitColorVariation.green = FLT2FIX(0);
   26301           0 :         p->emitColorVariation.blue = FLT2FIX(0);
   26302           0 :         p->emitterPosition.x = FLT2FIX(0);
   26303           0 :         p->emitterPosition.y = FLT2FIX(3);
   26304           0 :         p->emitterPosition.z = FLT2FIX(0);
   26305           0 :         p->emitVelocity.x = FLT2FIX(0);
   26306           0 :         p->emitVelocity.y = FLT2FIX(0);
   26307           0 :         p->emitVelocity.z = FLT2FIX(0);
   26308           0 :         p->emitVelocityVariation.x = FLT2FIX(1);
   26309           0 :         p->emitVelocityVariation.y = FLT2FIX(1);
   26310           0 :         p->emitVelocityVariation.z = FLT2FIX(1);
   26311           0 :         p->enabled = 1;
   26312           0 :         p->fadeAlpha = FLT2FIX(1.0);
   26313           0 :         p->fadeColor.red = FLT2FIX(0.25);
   26314           0 :         p->fadeColor.green = FLT2FIX(0.25);
   26315           0 :         p->fadeColor.blue = FLT2FIX(0.25);
   26316           0 :         p->fadeRate = FLT2FIX(0.25);
   26317           0 :         p->force.x = FLT2FIX(0);
   26318           0 :         p->force.y = FLT2FIX(-9.8);
   26319           0 :         p->force.z = FLT2FIX(0);
   26320           0 :         p->maxLifeTime = 5;
   26321           0 :         p->maxLifeTimeVariation = FLT2FIX(0);
   26322           0 :         p->maxParticles = 500;
   26323           0 :         p->minRange = FLT2FIX(1);
   26324           0 :         p->maxRange = FLT2FIX(-1);
   26325           0 :         p->primitiveType = 2;
   26326           0 :         p->particleRadius = FLT2FIX(0.1);
   26327           0 :         p->particleRadiusRate = FLT2FIX(0);
   26328           0 :         p->particleRadiusVariation = FLT2FIX(0);
   26329           0 :         return (GF_Node *)p;
   26330           0 : }
   26331             : 
   26332             : 
   26333             : /*
   26334             :         XXParticleInitBox Node deletion
   26335             : */
   26336             : 
   26337             : static void XXParticleInitBox_Del(GF_Node *node)
   26338             : {
   26339           0 :         M_XXParticleInitBox *p = (M_XXParticleInitBox *) node;
   26340           0 :         gf_node_free((GF_Node *) p);
   26341           0 : }
   26342             : 
   26343             : static const u16 XXParticleInitBox_Def2All[] = { 0, 1};
   26344             : static const u16 XXParticleInitBox_In2All[] = { 0, 1};
   26345             : static const u16 XXParticleInitBox_Out2All[] = { 0, 1};
   26346             : 
   26347             : static u32 XXParticleInitBox_get_field_count(GF_Node *node, u8 IndexMode)
   26348             : {
   26349           0 :         switch(IndexMode) {
   26350             :         case GF_SG_FIELD_CODING_IN:
   26351           0 :                 return 2;
   26352             :         case GF_SG_FIELD_CODING_DEF:
   26353           0 :                 return 2;
   26354             :         case GF_SG_FIELD_CODING_OUT:
   26355           0 :                 return 2;
   26356             :         case GF_SG_FIELD_CODING_DYN:
   26357           0 :                 return 0;
   26358             :         default:
   26359           0 :                 return 2;
   26360             :         }
   26361           0 : }
   26362             : 
   26363             : static GF_Err XXParticleInitBox_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26364             : {
   26365           0 :         switch(IndexMode) {
   26366             :         case GF_SG_FIELD_CODING_IN:
   26367           0 :                 *allField = XXParticleInitBox_In2All[inField];
   26368           0 :                 return GF_OK;
   26369             :         case GF_SG_FIELD_CODING_DEF:
   26370           0 :                 *allField = XXParticleInitBox_Def2All[inField];
   26371           0 :                 return GF_OK;
   26372             :         case GF_SG_FIELD_CODING_OUT:
   26373           0 :                 *allField = XXParticleInitBox_Out2All[inField];
   26374           0 :                 return GF_OK;
   26375             :         default:
   26376           0 :                 return GF_BAD_PARAM;
   26377             :         }
   26378           0 : }
   26379             : static GF_Err XXParticleInitBox_get_field(GF_Node *node, GF_FieldInfo *info)
   26380             : {
   26381           0 :         switch (info->fieldIndex) {
   26382             :         case 0:
   26383           0 :                 info->name = "falloff";
   26384           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26385           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26386           0 :                 info->far_ptr = & ((M_XXParticleInitBox *) node)->falloff;
   26387           0 :                 return GF_OK;
   26388             :         case 1:
   26389           0 :                 info->name = "size";
   26390           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26391           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26392           0 :                 info->far_ptr = & ((M_XXParticleInitBox *) node)->size;
   26393           0 :                 return GF_OK;
   26394             :         default:
   26395           0 :                 return GF_BAD_PARAM;
   26396             :         }
   26397           0 : }
   26398             : 
   26399             : 
   26400             : static s32 XXParticleInitBox_get_field_index_by_name(char *name)
   26401             : {
   26402           0 :         if (!strcmp("falloff", name)) return 0;
   26403           0 :         if (!strcmp("size", name)) return 1;
   26404           0 :         return -1;
   26405           0 : }
   26406             : static Bool XXParticleInitBox_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26407             : {
   26408             :         switch (FieldIndex) {
   26409             :         default:
   26410           0 :                 return 0;
   26411             :         }
   26412             : }
   26413             : 
   26414             : 
   26415             : 
   26416             : GF_Node *XXParticleInitBox_Create()
   26417             : {
   26418             :         M_XXParticleInitBox *p;
   26419           0 :         GF_SAFEALLOC(p, M_XXParticleInitBox);
   26420           0 :         if(!p) return NULL;
   26421           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXParticleInitBox);
   26422             : 
   26423             :         /*default field values*/
   26424           0 :         p->falloff = FLT2FIX(0);
   26425           0 :         p->size.x = FLT2FIX(1);
   26426           0 :         p->size.y = FLT2FIX(1);
   26427           0 :         p->size.z = FLT2FIX(1);
   26428           0 :         return (GF_Node *)p;
   26429           0 : }
   26430             : 
   26431             : 
   26432             : /*
   26433             :         XXPlanarObstacle Node deletion
   26434             : */
   26435             : 
   26436             : static void XXPlanarObstacle_Del(GF_Node *node)
   26437             : {
   26438           0 :         M_XXPlanarObstacle *p = (M_XXPlanarObstacle *) node;
   26439           0 :         gf_node_free((GF_Node *) p);
   26440           0 : }
   26441             : 
   26442             : static const u16 XXPlanarObstacle_Def2All[] = { 0, 1, 2, 3};
   26443             : static const u16 XXPlanarObstacle_In2All[] = { 0, 1, 2, 3};
   26444             : static const u16 XXPlanarObstacle_Out2All[] = { 0, 1, 2, 3};
   26445             : 
   26446             : static u32 XXPlanarObstacle_get_field_count(GF_Node *node, u8 IndexMode)
   26447             : {
   26448           0 :         switch(IndexMode) {
   26449             :         case GF_SG_FIELD_CODING_IN:
   26450           0 :                 return 4;
   26451             :         case GF_SG_FIELD_CODING_DEF:
   26452           0 :                 return 4;
   26453             :         case GF_SG_FIELD_CODING_OUT:
   26454           0 :                 return 4;
   26455             :         case GF_SG_FIELD_CODING_DYN:
   26456           0 :                 return 0;
   26457             :         default:
   26458           0 :                 return 4;
   26459             :         }
   26460           0 : }
   26461             : 
   26462             : static GF_Err XXPlanarObstacle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26463             : {
   26464           0 :         switch(IndexMode) {
   26465             :         case GF_SG_FIELD_CODING_IN:
   26466           0 :                 *allField = XXPlanarObstacle_In2All[inField];
   26467           0 :                 return GF_OK;
   26468             :         case GF_SG_FIELD_CODING_DEF:
   26469           0 :                 *allField = XXPlanarObstacle_Def2All[inField];
   26470           0 :                 return GF_OK;
   26471             :         case GF_SG_FIELD_CODING_OUT:
   26472           0 :                 *allField = XXPlanarObstacle_Out2All[inField];
   26473           0 :                 return GF_OK;
   26474             :         default:
   26475           0 :                 return GF_BAD_PARAM;
   26476             :         }
   26477           0 : }
   26478             : static GF_Err XXPlanarObstacle_get_field(GF_Node *node, GF_FieldInfo *info)
   26479             : {
   26480           0 :         switch (info->fieldIndex) {
   26481             :         case 0:
   26482           0 :                 info->name = "distance";
   26483           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26484           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26485           0 :                 info->far_ptr = & ((M_XXPlanarObstacle *) node)->distance;
   26486           0 :                 return GF_OK;
   26487             :         case 1:
   26488           0 :                 info->name = "normal";
   26489           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26490           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26491           0 :                 info->far_ptr = & ((M_XXPlanarObstacle *) node)->normal;
   26492           0 :                 return GF_OK;
   26493             :         case 2:
   26494           0 :                 info->name = "reflection";
   26495           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26496           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26497           0 :                 info->far_ptr = & ((M_XXPlanarObstacle *) node)->reflection;
   26498           0 :                 return GF_OK;
   26499             :         case 3:
   26500           0 :                 info->name = "absorption";
   26501           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26502           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26503           0 :                 info->far_ptr = & ((M_XXPlanarObstacle *) node)->absorption;
   26504           0 :                 return GF_OK;
   26505             :         default:
   26506           0 :                 return GF_BAD_PARAM;
   26507             :         }
   26508           0 : }
   26509             : 
   26510             : 
   26511             : static s32 XXPlanarObstacle_get_field_index_by_name(char *name)
   26512             : {
   26513           0 :         if (!strcmp("distance", name)) return 0;
   26514           0 :         if (!strcmp("normal", name)) return 1;
   26515           0 :         if (!strcmp("reflection", name)) return 2;
   26516           0 :         if (!strcmp("absorption", name)) return 3;
   26517           0 :         return -1;
   26518           0 : }
   26519             : static Bool XXPlanarObstacle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26520             : {
   26521             :         switch (FieldIndex) {
   26522             :         default:
   26523           0 :                 return 0;
   26524             :         }
   26525             : }
   26526             : 
   26527             : 
   26528             : 
   26529             : GF_Node *XXPlanarObstacle_Create()
   26530             : {
   26531             :         M_XXPlanarObstacle *p;
   26532           0 :         GF_SAFEALLOC(p, M_XXPlanarObstacle);
   26533           0 :         if(!p) return NULL;
   26534           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXPlanarObstacle);
   26535             : 
   26536             :         /*default field values*/
   26537           0 :         p->distance.x = FLT2FIX(0);
   26538           0 :         p->distance.y = FLT2FIX(0);
   26539           0 :         p->distance.z = FLT2FIX(0);
   26540           0 :         p->normal.x = FLT2FIX(0);
   26541           0 :         p->normal.y = FLT2FIX(1);
   26542           0 :         p->normal.z = FLT2FIX(0);
   26543           0 :         p->reflection = FLT2FIX(0);
   26544           0 :         p->absorption = FLT2FIX(0);
   26545           0 :         return (GF_Node *)p;
   26546           0 : }
   26547             : 
   26548             : 
   26549             : /*
   26550             :         XXPointAttractor Node deletion
   26551             : */
   26552             : 
   26553             : static void XXPointAttractor_Del(GF_Node *node)
   26554             : {
   26555           0 :         M_XXPointAttractor *p = (M_XXPointAttractor *) node;
   26556           0 :         gf_node_free((GF_Node *) p);
   26557           0 : }
   26558             : 
   26559             : static const u16 XXPointAttractor_Def2All[] = { 0, 1, 2, 3};
   26560             : static const u16 XXPointAttractor_In2All[] = { 0, 1, 2, 3};
   26561             : static const u16 XXPointAttractor_Out2All[] = { 0, 1, 2, 3};
   26562             : 
   26563             : static u32 XXPointAttractor_get_field_count(GF_Node *node, u8 IndexMode)
   26564             : {
   26565           0 :         switch(IndexMode) {
   26566             :         case GF_SG_FIELD_CODING_IN:
   26567           0 :                 return 4;
   26568             :         case GF_SG_FIELD_CODING_DEF:
   26569           0 :                 return 4;
   26570             :         case GF_SG_FIELD_CODING_OUT:
   26571           0 :                 return 4;
   26572             :         case GF_SG_FIELD_CODING_DYN:
   26573           0 :                 return 0;
   26574             :         default:
   26575           0 :                 return 4;
   26576             :         }
   26577           0 : }
   26578             : 
   26579             : static GF_Err XXPointAttractor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26580             : {
   26581           0 :         switch(IndexMode) {
   26582             :         case GF_SG_FIELD_CODING_IN:
   26583           0 :                 *allField = XXPointAttractor_In2All[inField];
   26584           0 :                 return GF_OK;
   26585             :         case GF_SG_FIELD_CODING_DEF:
   26586           0 :                 *allField = XXPointAttractor_Def2All[inField];
   26587           0 :                 return GF_OK;
   26588             :         case GF_SG_FIELD_CODING_OUT:
   26589           0 :                 *allField = XXPointAttractor_Out2All[inField];
   26590           0 :                 return GF_OK;
   26591             :         default:
   26592           0 :                 return GF_BAD_PARAM;
   26593             :         }
   26594           0 : }
   26595             : static GF_Err XXPointAttractor_get_field(GF_Node *node, GF_FieldInfo *info)
   26596             : {
   26597           0 :         switch (info->fieldIndex) {
   26598             :         case 0:
   26599           0 :                 info->name = "innerRadius";
   26600           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26601           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26602           0 :                 info->far_ptr = & ((M_XXPointAttractor *) node)->innerRadius;
   26603           0 :                 return GF_OK;
   26604             :         case 1:
   26605           0 :                 info->name = "outerRadius";
   26606           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26607           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26608           0 :                 info->far_ptr = & ((M_XXPointAttractor *) node)->outerRadius;
   26609           0 :                 return GF_OK;
   26610             :         case 2:
   26611           0 :                 info->name = "position";
   26612           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26613           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26614           0 :                 info->far_ptr = & ((M_XXPointAttractor *) node)->position;
   26615           0 :                 return GF_OK;
   26616             :         case 3:
   26617           0 :                 info->name = "rate";
   26618           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26619           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26620           0 :                 info->far_ptr = & ((M_XXPointAttractor *) node)->rate;
   26621           0 :                 return GF_OK;
   26622             :         default:
   26623           0 :                 return GF_BAD_PARAM;
   26624             :         }
   26625           0 : }
   26626             : 
   26627             : 
   26628             : static s32 XXPointAttractor_get_field_index_by_name(char *name)
   26629             : {
   26630           0 :         if (!strcmp("innerRadius", name)) return 0;
   26631           0 :         if (!strcmp("outerRadius", name)) return 1;
   26632           0 :         if (!strcmp("position", name)) return 2;
   26633           0 :         if (!strcmp("rate", name)) return 3;
   26634           0 :         return -1;
   26635           0 : }
   26636             : static Bool XXPointAttractor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26637             : {
   26638             :         switch (FieldIndex) {
   26639             :         default:
   26640           0 :                 return 0;
   26641             :         }
   26642             : }
   26643             : 
   26644             : 
   26645             : 
   26646             : GF_Node *XXPointAttractor_Create()
   26647             : {
   26648             :         M_XXPointAttractor *p;
   26649           0 :         GF_SAFEALLOC(p, M_XXPointAttractor);
   26650           0 :         if(!p) return NULL;
   26651           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXPointAttractor);
   26652             : 
   26653             :         /*default field values*/
   26654           0 :         p->innerRadius = FLT2FIX(10);
   26655           0 :         p->outerRadius = FLT2FIX(100);
   26656           0 :         p->position.x = FLT2FIX(0);
   26657           0 :         p->position.y = FLT2FIX(0);
   26658           0 :         p->position.z = FLT2FIX(0);
   26659           0 :         p->rate = FLT2FIX(1);
   26660           0 :         return (GF_Node *)p;
   26661           0 : }
   26662             : 
   26663             : 
   26664             : /*
   26665             :         PointTexture Node deletion
   26666             : */
   26667             : 
   26668             : static void PointTexture_Del(GF_Node *node)
   26669             : {
   26670           0 :         M_PointTexture *p = (M_PointTexture *) node;
   26671           0 :         gf_sg_mfcolor_del(p->color);
   26672           0 :         gf_sg_mfint32_del(p->depth);
   26673           0 :         gf_node_free((GF_Node *) p);
   26674           0 : }
   26675             : 
   26676             : static const u16 PointTexture_Def2All[] = { 0, 1, 2, 3, 4};
   26677             : 
   26678             : static u32 PointTexture_get_field_count(GF_Node *node, u8 IndexMode)
   26679             : {
   26680           0 :         switch(IndexMode) {
   26681             :         case GF_SG_FIELD_CODING_IN:
   26682           0 :                 return 0;
   26683             :         case GF_SG_FIELD_CODING_DEF:
   26684           0 :                 return 5;
   26685             :         case GF_SG_FIELD_CODING_OUT:
   26686           0 :                 return 0;
   26687             :         case GF_SG_FIELD_CODING_DYN:
   26688           0 :                 return 0;
   26689             :         default:
   26690           0 :                 return 5;
   26691             :         }
   26692           0 : }
   26693             : 
   26694             : static GF_Err PointTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26695             : {
   26696           0 :         switch(IndexMode) {
   26697             :         case GF_SG_FIELD_CODING_DEF:
   26698           0 :                 *allField = PointTexture_Def2All[inField];
   26699           0 :                 return GF_OK;
   26700             :         default:
   26701           0 :                 return GF_BAD_PARAM;
   26702             :         }
   26703           0 : }
   26704             : static GF_Err PointTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   26705             : {
   26706           0 :         switch (info->fieldIndex) {
   26707             :         case 0:
   26708           0 :                 info->name = "color";
   26709           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   26710           0 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   26711           0 :                 info->far_ptr = & ((M_PointTexture *) node)->color;
   26712           0 :                 return GF_OK;
   26713             :         case 1:
   26714           0 :                 info->name = "depth";
   26715           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   26716           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   26717           0 :                 info->far_ptr = & ((M_PointTexture *) node)->depth;
   26718           0 :                 return GF_OK;
   26719             :         case 2:
   26720           0 :                 info->name = "depthNbBits";
   26721           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   26722           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26723           0 :                 info->far_ptr = & ((M_PointTexture *) node)->depthNbBits;
   26724           0 :                 return GF_OK;
   26725             :         case 3:
   26726           0 :                 info->name = "height";
   26727           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   26728           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26729           0 :                 info->far_ptr = & ((M_PointTexture *) node)->height;
   26730           0 :                 return GF_OK;
   26731             :         case 4:
   26732           0 :                 info->name = "width";
   26733           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   26734           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26735           0 :                 info->far_ptr = & ((M_PointTexture *) node)->width;
   26736           0 :                 return GF_OK;
   26737             :         default:
   26738           0 :                 return GF_BAD_PARAM;
   26739             :         }
   26740           0 : }
   26741             : 
   26742             : 
   26743             : static s32 PointTexture_get_field_index_by_name(char *name)
   26744             : {
   26745           0 :         if (!strcmp("color", name)) return 0;
   26746           0 :         if (!strcmp("depth", name)) return 1;
   26747           0 :         if (!strcmp("depthNbBits", name)) return 2;
   26748           0 :         if (!strcmp("height", name)) return 3;
   26749           0 :         if (!strcmp("width", name)) return 4;
   26750           0 :         return -1;
   26751           0 : }
   26752             : static Bool PointTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26753             : {
   26754           0 :         switch (FieldIndex) {
   26755             :         case 2:
   26756           0 :                 *AType = 0;
   26757           0 :                 *QType = 13;
   26758           0 :                 *QT13_bits = 5;
   26759           0 :                 *b_min = FLT2FIX(0);
   26760           0 :                 *b_max = FLT2FIX(31);
   26761           0 :                 return 1;
   26762             :         default:
   26763           0 :                 return 0;
   26764             :         }
   26765           0 : }
   26766             : 
   26767             : 
   26768             : 
   26769             : GF_Node *PointTexture_Create()
   26770             : {
   26771             :         M_PointTexture *p;
   26772           0 :         GF_SAFEALLOC(p, M_PointTexture);
   26773           0 :         if(!p) return NULL;
   26774           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointTexture);
   26775             : 
   26776             :         /*default field values*/
   26777           0 :         p->depthNbBits = 7;
   26778           0 :         p->height = 256;
   26779           0 :         p->width = 256;
   26780           0 :         return (GF_Node *)p;
   26781           0 : }
   26782             : 
   26783             : 
   26784             : /*
   26785             :         PositionAnimator Node deletion
   26786             : */
   26787             : 
   26788             : static void PositionAnimator_Del(GF_Node *node)
   26789             : {
   26790          36 :         M_PositionAnimator *p = (M_PositionAnimator *) node;
   26791          18 :         gf_sg_mffloat_del(p->key);
   26792          18 :         gf_sg_mfrotation_del(p->keyOrientation);
   26793          18 :         gf_sg_mfvec2f_del(p->keySpline);
   26794          18 :         gf_sg_mfvec3f_del(p->keyValue);
   26795          18 :         gf_sg_mffloat_del(p->weight);
   26796          18 :         gf_node_free((GF_Node *) p);
   26797          18 : }
   26798             : 
   26799             : static const u16 PositionAnimator_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
   26800             : static const u16 PositionAnimator_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   26801             : static const u16 PositionAnimator_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   26802             : 
   26803             : static u32 PositionAnimator_get_field_count(GF_Node *node, u8 IndexMode)
   26804             : {
   26805          68 :         switch(IndexMode) {
   26806             :         case GF_SG_FIELD_CODING_IN:
   26807           9 :                 return 10;
   26808             :         case GF_SG_FIELD_CODING_DEF:
   26809           9 :                 return 9;
   26810             :         case GF_SG_FIELD_CODING_OUT:
   26811           9 :                 return 12;
   26812             :         case GF_SG_FIELD_CODING_DYN:
   26813           0 :                 return 0;
   26814             :         default:
   26815           7 :                 return 13;
   26816             :         }
   26817          34 : }
   26818             : 
   26819             : static GF_Err PositionAnimator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26820             : {
   26821         158 :         switch(IndexMode) {
   26822             :         case GF_SG_FIELD_CODING_IN:
   26823           7 :                 *allField = PositionAnimator_In2All[inField];
   26824           7 :                 return GF_OK;
   26825             :         case GF_SG_FIELD_CODING_DEF:
   26826          43 :                 *allField = PositionAnimator_Def2All[inField];
   26827          43 :                 return GF_OK;
   26828             :         case GF_SG_FIELD_CODING_OUT:
   26829          29 :                 *allField = PositionAnimator_Out2All[inField];
   26830          29 :                 return GF_OK;
   26831             :         default:
   26832           0 :                 return GF_BAD_PARAM;
   26833             :         }
   26834          79 : }
   26835             : static GF_Err PositionAnimator_get_field(GF_Node *node, GF_FieldInfo *info)
   26836             : {
   26837         562 :         switch (info->fieldIndex) {
   26838             :         case 0:
   26839          15 :                 info->name = "set_fraction";
   26840          15 :                 info->eventType = GF_SG_EVENT_IN;
   26841          15 :                 info->on_event_in = ((M_PositionAnimator *)node)->on_set_fraction;
   26842          15 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26843          15 :                 info->far_ptr = & ((M_PositionAnimator *) node)->set_fraction;
   26844          15 :                 return GF_OK;
   26845             :         case 1:
   26846          18 :                 info->name = "fromTo";
   26847          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26848          18 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   26849          18 :                 info->far_ptr = & ((M_PositionAnimator *) node)->fromTo;
   26850          18 :                 return GF_OK;
   26851             :         case 2:
   26852          33 :                 info->name = "key";
   26853          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26854          33 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   26855          33 :                 info->far_ptr = & ((M_PositionAnimator *) node)->key;
   26856          33 :                 return GF_OK;
   26857             :         case 3:
   26858          18 :                 info->name = "keyOrientation";
   26859          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26860          18 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   26861          18 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keyOrientation;
   26862          18 :                 return GF_OK;
   26863             :         case 4:
   26864          33 :                 info->name = "keyType";
   26865          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26866          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26867          33 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keyType;
   26868          33 :                 return GF_OK;
   26869             :         case 5:
   26870          33 :                 info->name = "keySpline";
   26871          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26872          33 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   26873          33 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keySpline;
   26874          33 :                 return GF_OK;
   26875             :         case 6:
   26876          33 :                 info->name = "keyValue";
   26877          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26878          33 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   26879          33 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keyValue;
   26880          33 :                 return GF_OK;
   26881             :         case 7:
   26882          33 :                 info->name = "keyValueType";
   26883          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26884          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26885          33 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keyValueType;
   26886          33 :                 return GF_OK;
   26887             :         case 8:
   26888          18 :                 info->name = "offset";
   26889          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26890          18 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26891          18 :                 info->far_ptr = & ((M_PositionAnimator *) node)->offset;
   26892          18 :                 return GF_OK;
   26893             :         case 9:
   26894          18 :                 info->name = "weight";
   26895          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26896          18 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   26897          18 :                 info->far_ptr = & ((M_PositionAnimator *) node)->weight;
   26898          18 :                 return GF_OK;
   26899             :         case 10:
   26900           7 :                 info->name = "endValue";
   26901           7 :                 info->eventType = GF_SG_EVENT_OUT;
   26902           7 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26903           7 :                 info->far_ptr = & ((M_PositionAnimator *) node)->endValue;
   26904           7 :                 return GF_OK;
   26905             :         case 11:
   26906           7 :                 info->name = "rotation_changed";
   26907           7 :                 info->eventType = GF_SG_EVENT_OUT;
   26908           7 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   26909           7 :                 info->far_ptr = & ((M_PositionAnimator *) node)->rotation_changed;
   26910           7 :                 return GF_OK;
   26911             :         case 12:
   26912          15 :                 info->name = "value_changed";
   26913          15 :                 info->eventType = GF_SG_EVENT_OUT;
   26914          15 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26915          15 :                 info->far_ptr = & ((M_PositionAnimator *) node)->value_changed;
   26916          15 :                 return GF_OK;
   26917             :         default:
   26918           0 :                 return GF_BAD_PARAM;
   26919             :         }
   26920         281 : }
   26921             : 
   26922             : 
   26923             : static s32 PositionAnimator_get_field_index_by_name(char *name)
   26924             : {
   26925          60 :         if (!strcmp("set_fraction", name)) return 0;
   26926          24 :         if (!strcmp("fromTo", name)) return 1;
   26927          28 :         if (!strcmp("key", name)) return 2;
   26928          20 :         if (!strcmp("keyOrientation", name)) return 3;
   26929          24 :         if (!strcmp("keyType", name)) return 4;
   26930          20 :         if (!strcmp("keySpline", name)) return 5;
   26931          16 :         if (!strcmp("keyValue", name)) return 6;
   26932          12 :         if (!strcmp("keyValueType", name)) return 7;
   26933           4 :         if (!strcmp("offset", name)) return 8;
   26934           4 :         if (!strcmp("weight", name)) return 9;
   26935           4 :         if (!strcmp("endValue", name)) return 10;
   26936           4 :         if (!strcmp("rotation_changed", name)) return 11;
   26937           8 :         if (!strcmp("value_changed", name)) return 12;
   26938           0 :         return -1;
   26939          28 : }
   26940             : static Bool PositionAnimator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26941             : {
   26942           0 :         switch (FieldIndex) {
   26943             :         case 1:
   26944           0 :                 *AType = 0;
   26945           0 :                 *QType = 8;
   26946           0 :                 return 1;
   26947             :         case 2:
   26948           0 :                 *AType = 0;
   26949           0 :                 *QType = 8;
   26950           0 :                 return 1;
   26951             :         case 5:
   26952           0 :                 *AType = 0;
   26953           0 :                 *QType = 8;
   26954           0 :                 return 1;
   26955             :         case 6:
   26956           0 :                 *AType = 0;
   26957           0 :                 *QType = 4;
   26958           0 :                 return 1;
   26959             :         case 8:
   26960           0 :                 *AType = 0;
   26961           0 :                 *QType = 1;
   26962           0 :                 *b_min = FIX_MIN;
   26963           0 :                 *b_max = FIX_MAX;
   26964           0 :                 return 1;
   26965             :         default:
   26966           0 :                 return 0;
   26967             :         }
   26968           0 : }
   26969             : 
   26970             : 
   26971             : 
   26972             : GF_Node *PositionAnimator_Create()
   26973             : {
   26974             :         M_PositionAnimator *p;
   26975          54 :         GF_SAFEALLOC(p, M_PositionAnimator);
   26976          18 :         if(!p) return NULL;
   26977          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionAnimator);
   26978             : 
   26979             :         /*default field values*/
   26980          18 :         p->fromTo.x = FLT2FIX(0);
   26981          18 :         p->fromTo.y = FLT2FIX(1);
   26982          18 :         p->keyType = 0;
   26983          18 :         p->keySpline.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   26984          18 :         p->keySpline.count = 2;
   26985          18 :         p->keySpline.vals[0].x = FLT2FIX(0);
   26986          18 :         p->keySpline.vals[0].y = FLT2FIX(0);
   26987          18 :         p->keySpline.vals[1].x = FLT2FIX(1);
   26988          18 :         p->keySpline.vals[1].y = FLT2FIX(1);
   26989          18 :         p->keyValueType = 0;
   26990          18 :         p->offset.x = FLT2FIX(0);
   26991          18 :         p->offset.y = FLT2FIX(0);
   26992          18 :         p->offset.z = FLT2FIX(0);
   26993          18 :         return (GF_Node *)p;
   26994          18 : }
   26995             : 
   26996             : 
   26997             : /*
   26998             :         PositionAnimator2D Node deletion
   26999             : */
   27000             : 
   27001             : static void PositionAnimator2D_Del(GF_Node *node)
   27002             : {
   27003          36 :         M_PositionAnimator2D *p = (M_PositionAnimator2D *) node;
   27004          18 :         gf_sg_mffloat_del(p->key);
   27005          18 :         gf_sg_mfvec2f_del(p->keySpline);
   27006          18 :         gf_sg_mfvec2f_del(p->keyValue);
   27007          18 :         gf_sg_mffloat_del(p->weight);
   27008          18 :         gf_node_free((GF_Node *) p);
   27009          18 : }
   27010             : 
   27011             : static const u16 PositionAnimator2D_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27012             : static const u16 PositionAnimator2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27013             : static const u16 PositionAnimator2D_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   27014             : 
   27015             : static u32 PositionAnimator2D_get_field_count(GF_Node *node, u8 IndexMode)
   27016             : {
   27017          68 :         switch(IndexMode) {
   27018             :         case GF_SG_FIELD_CODING_IN:
   27019           9 :                 return 10;
   27020             :         case GF_SG_FIELD_CODING_DEF:
   27021           9 :                 return 9;
   27022             :         case GF_SG_FIELD_CODING_OUT:
   27023           9 :                 return 12;
   27024             :         case GF_SG_FIELD_CODING_DYN:
   27025           0 :                 return 0;
   27026             :         default:
   27027           7 :                 return 13;
   27028             :         }
   27029          34 : }
   27030             : 
   27031             : static GF_Err PositionAnimator2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27032             : {
   27033         158 :         switch(IndexMode) {
   27034             :         case GF_SG_FIELD_CODING_IN:
   27035           7 :                 *allField = PositionAnimator2D_In2All[inField];
   27036           7 :                 return GF_OK;
   27037             :         case GF_SG_FIELD_CODING_DEF:
   27038          43 :                 *allField = PositionAnimator2D_Def2All[inField];
   27039          43 :                 return GF_OK;
   27040             :         case GF_SG_FIELD_CODING_OUT:
   27041          29 :                 *allField = PositionAnimator2D_Out2All[inField];
   27042          29 :                 return GF_OK;
   27043             :         default:
   27044           0 :                 return GF_BAD_PARAM;
   27045             :         }
   27046          79 : }
   27047             : static GF_Err PositionAnimator2D_get_field(GF_Node *node, GF_FieldInfo *info)
   27048             : {
   27049         562 :         switch (info->fieldIndex) {
   27050             :         case 0:
   27051          15 :                 info->name = "set_fraction";
   27052          15 :                 info->eventType = GF_SG_EVENT_IN;
   27053          15 :                 info->on_event_in = ((M_PositionAnimator2D *)node)->on_set_fraction;
   27054          15 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   27055          15 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->set_fraction;
   27056          15 :                 return GF_OK;
   27057             :         case 1:
   27058          18 :                 info->name = "fromTo";
   27059          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27060          18 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   27061          18 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->fromTo;
   27062          18 :                 return GF_OK;
   27063             :         case 2:
   27064          33 :                 info->name = "key";
   27065          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27066          33 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27067          33 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->key;
   27068          33 :                 return GF_OK;
   27069             :         case 3:
   27070          18 :                 info->name = "keyOrientation";
   27071          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27072          18 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27073          18 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keyOrientation;
   27074          18 :                 return GF_OK;
   27075             :         case 4:
   27076          33 :                 info->name = "keyType";
   27077          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27078          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27079          33 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keyType;
   27080          33 :                 return GF_OK;
   27081             :         case 5:
   27082          33 :                 info->name = "keySpline";
   27083          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27084          33 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27085          33 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keySpline;
   27086          33 :                 return GF_OK;
   27087             :         case 6:
   27088          33 :                 info->name = "keyValue";
   27089          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27090          33 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27091          33 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keyValue;
   27092          33 :                 return GF_OK;
   27093             :         case 7:
   27094          33 :                 info->name = "keyValueType";
   27095          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27096          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27097          33 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keyValueType;
   27098          33 :                 return GF_OK;
   27099             :         case 8:
   27100          18 :                 info->name = "offset";
   27101          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27102          18 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   27103          18 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->offset;
   27104          18 :                 return GF_OK;
   27105             :         case 9:
   27106          18 :                 info->name = "weight";
   27107          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27108          18 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27109          18 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->weight;
   27110          18 :                 return GF_OK;
   27111             :         case 10:
   27112           7 :                 info->name = "endValue";
   27113           7 :                 info->eventType = GF_SG_EVENT_OUT;
   27114           7 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   27115           7 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->endValue;
   27116           7 :                 return GF_OK;
   27117             :         case 11:
   27118           7 :                 info->name = "rotation_changed";
   27119           7 :                 info->eventType = GF_SG_EVENT_OUT;
   27120           7 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   27121           7 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->rotation_changed;
   27122           7 :                 return GF_OK;
   27123             :         case 12:
   27124          15 :                 info->name = "value_changed";
   27125          15 :                 info->eventType = GF_SG_EVENT_OUT;
   27126          15 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   27127          15 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->value_changed;
   27128          15 :                 return GF_OK;
   27129             :         default:
   27130           0 :                 return GF_BAD_PARAM;
   27131             :         }
   27132         281 : }
   27133             : 
   27134             : 
   27135             : static s32 PositionAnimator2D_get_field_index_by_name(char *name)
   27136             : {
   27137          60 :         if (!strcmp("set_fraction", name)) return 0;
   27138          24 :         if (!strcmp("fromTo", name)) return 1;
   27139          28 :         if (!strcmp("key", name)) return 2;
   27140          20 :         if (!strcmp("keyOrientation", name)) return 3;
   27141          24 :         if (!strcmp("keyType", name)) return 4;
   27142          20 :         if (!strcmp("keySpline", name)) return 5;
   27143          16 :         if (!strcmp("keyValue", name)) return 6;
   27144          12 :         if (!strcmp("keyValueType", name)) return 7;
   27145           4 :         if (!strcmp("offset", name)) return 8;
   27146           4 :         if (!strcmp("weight", name)) return 9;
   27147           4 :         if (!strcmp("endValue", name)) return 10;
   27148           4 :         if (!strcmp("rotation_changed", name)) return 11;
   27149           8 :         if (!strcmp("value_changed", name)) return 12;
   27150           0 :         return -1;
   27151          28 : }
   27152             : static Bool PositionAnimator2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   27153             : {
   27154           0 :         switch (FieldIndex) {
   27155             :         case 1:
   27156           0 :                 *AType = 0;
   27157           0 :                 *QType = 8;
   27158           0 :                 return 1;
   27159             :         case 2:
   27160           0 :                 *AType = 0;
   27161           0 :                 *QType = 8;
   27162           0 :                 return 1;
   27163             :         case 5:
   27164           0 :                 *AType = 0;
   27165           0 :                 *QType = 8;
   27166           0 :                 return 1;
   27167             :         case 6:
   27168           0 :                 *AType = 0;
   27169           0 :                 *QType = 4;
   27170           0 :                 return 1;
   27171             :         case 8:
   27172           0 :                 *AType = 0;
   27173           0 :                 *QType = 2;
   27174           0 :                 *b_min = FIX_MIN;
   27175           0 :                 *b_max = FIX_MAX;
   27176           0 :                 return 1;
   27177             :         default:
   27178           0 :                 return 0;
   27179             :         }
   27180           0 : }
   27181             : 
   27182             : 
   27183             : 
   27184             : GF_Node *PositionAnimator2D_Create()
   27185             : {
   27186             :         M_PositionAnimator2D *p;
   27187          54 :         GF_SAFEALLOC(p, M_PositionAnimator2D);
   27188          18 :         if(!p) return NULL;
   27189          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionAnimator2D);
   27190             : 
   27191             :         /*default field values*/
   27192          18 :         p->fromTo.x = FLT2FIX(0);
   27193          18 :         p->fromTo.y = FLT2FIX(1);
   27194          18 :         p->keyOrientation = 0;
   27195          18 :         p->keyType = 0;
   27196          18 :         p->keySpline.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   27197          18 :         p->keySpline.count = 2;
   27198          18 :         p->keySpline.vals[0].x = FLT2FIX(0);
   27199          18 :         p->keySpline.vals[0].y = FLT2FIX(0);
   27200          18 :         p->keySpline.vals[1].x = FLT2FIX(1);
   27201          18 :         p->keySpline.vals[1].y = FLT2FIX(1);
   27202          18 :         p->keyValueType = 0;
   27203          18 :         p->offset.x = FLT2FIX(0);
   27204          18 :         p->offset.y = FLT2FIX(0);
   27205          18 :         return (GF_Node *)p;
   27206          18 : }
   27207             : 
   27208             : 
   27209             : /*
   27210             :         PositionInterpolator4D Node deletion
   27211             : */
   27212             : 
   27213             : static void PositionInterpolator4D_Del(GF_Node *node)
   27214             : {
   27215           0 :         M_PositionInterpolator4D *p = (M_PositionInterpolator4D *) node;
   27216           0 :         gf_sg_mffloat_del(p->key);
   27217           0 :         gf_sg_mfvec4f_del(p->keyValue);
   27218           0 :         gf_node_free((GF_Node *) p);
   27219           0 : }
   27220             : 
   27221             : static const u16 PositionInterpolator4D_Def2All[] = { 1, 2};
   27222             : static const u16 PositionInterpolator4D_In2All[] = { 0, 1, 2};
   27223             : static const u16 PositionInterpolator4D_Out2All[] = { 1, 2, 3};
   27224             : 
   27225             : static u32 PositionInterpolator4D_get_field_count(GF_Node *node, u8 IndexMode)
   27226             : {
   27227           0 :         switch(IndexMode) {
   27228             :         case GF_SG_FIELD_CODING_IN:
   27229           0 :                 return 3;
   27230             :         case GF_SG_FIELD_CODING_DEF:
   27231           0 :                 return 2;
   27232             :         case GF_SG_FIELD_CODING_OUT:
   27233           0 :                 return 3;
   27234             :         case GF_SG_FIELD_CODING_DYN:
   27235           0 :                 return 0;
   27236             :         default:
   27237           0 :                 return 4;
   27238             :         }
   27239           0 : }
   27240             : 
   27241             : static GF_Err PositionInterpolator4D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27242             : {
   27243           0 :         switch(IndexMode) {
   27244             :         case GF_SG_FIELD_CODING_IN:
   27245           0 :                 *allField = PositionInterpolator4D_In2All[inField];
   27246           0 :                 return GF_OK;
   27247             :         case GF_SG_FIELD_CODING_DEF:
   27248           0 :                 *allField = PositionInterpolator4D_Def2All[inField];
   27249           0 :                 return GF_OK;
   27250             :         case GF_SG_FIELD_CODING_OUT:
   27251           0 :                 *allField = PositionInterpolator4D_Out2All[inField];
   27252           0 :                 return GF_OK;
   27253             :         default:
   27254           0 :                 return GF_BAD_PARAM;
   27255             :         }
   27256           0 : }
   27257             : static GF_Err PositionInterpolator4D_get_field(GF_Node *node, GF_FieldInfo *info)
   27258             : {
   27259           0 :         switch (info->fieldIndex) {
   27260             :         case 0:
   27261           0 :                 info->name = "set_fraction";
   27262           0 :                 info->eventType = GF_SG_EVENT_IN;
   27263           0 :                 info->on_event_in = ((M_PositionInterpolator4D *)node)->on_set_fraction;
   27264           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   27265           0 :                 info->far_ptr = & ((M_PositionInterpolator4D *) node)->set_fraction;
   27266           0 :                 return GF_OK;
   27267             :         case 1:
   27268           0 :                 info->name = "key";
   27269           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27270           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27271           0 :                 info->far_ptr = & ((M_PositionInterpolator4D *) node)->key;
   27272           0 :                 return GF_OK;
   27273             :         case 2:
   27274           0 :                 info->name = "keyValue";
   27275           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27276           0 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   27277           0 :                 info->far_ptr = & ((M_PositionInterpolator4D *) node)->keyValue;
   27278           0 :                 return GF_OK;
   27279             :         case 3:
   27280           0 :                 info->name = "value_changed";
   27281           0 :                 info->eventType = GF_SG_EVENT_OUT;
   27282           0 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27283           0 :                 info->far_ptr = & ((M_PositionInterpolator4D *) node)->value_changed;
   27284           0 :                 return GF_OK;
   27285             :         default:
   27286           0 :                 return GF_BAD_PARAM;
   27287             :         }
   27288           0 : }
   27289             : 
   27290             : 
   27291             : static s32 PositionInterpolator4D_get_field_index_by_name(char *name)
   27292             : {
   27293           0 :         if (!strcmp("set_fraction", name)) return 0;
   27294           0 :         if (!strcmp("key", name)) return 1;
   27295           0 :         if (!strcmp("keyValue", name)) return 2;
   27296           0 :         if (!strcmp("value_changed", name)) return 3;
   27297           0 :         return -1;
   27298           0 : }
   27299             : static Bool PositionInterpolator4D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   27300             : {
   27301           0 :         switch (FieldIndex) {
   27302             :         case 1:
   27303           0 :                 *AType = 0;
   27304           0 :                 *QType = 8;
   27305           0 :                 *b_min = FLT2FIX(0);
   27306           0 :                 *b_max = FLT2FIX(1);
   27307           0 :                 return 1;
   27308             :         case 2:
   27309           0 :                 *AType = 0;
   27310           0 :                 *QType = 15;
   27311           0 :                 *b_min = FIX_MIN;
   27312           0 :                 *b_max = FIX_MAX;
   27313           0 :                 return 1;
   27314             :         default:
   27315           0 :                 return 0;
   27316             :         }
   27317           0 : }
   27318             : 
   27319             : 
   27320             : 
   27321             : GF_Node *PositionInterpolator4D_Create()
   27322             : {
   27323             :         M_PositionInterpolator4D *p;
   27324           0 :         GF_SAFEALLOC(p, M_PositionInterpolator4D);
   27325           0 :         if(!p) return NULL;
   27326           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionInterpolator4D);
   27327             : 
   27328             :         /*default field values*/
   27329           0 :         return (GF_Node *)p;
   27330           0 : }
   27331             : 
   27332             : 
   27333             : /*
   27334             :         ProceduralTexture Node deletion
   27335             : */
   27336             : 
   27337             : static void ProceduralTexture_Del(GF_Node *node)
   27338             : {
   27339           0 :         M_ProceduralTexture *p = (M_ProceduralTexture *) node;
   27340           0 :         gf_sg_mfvec2f_del(p->aWarpmap);
   27341           0 :         gf_sg_mffloat_del(p->aWeights);
   27342           0 :         gf_sg_mfvec2f_del(p->bWarpmap);
   27343           0 :         gf_sg_mffloat_del(p->bWeights);
   27344           0 :         gf_sg_mfcolor_del(p->color);
   27345           0 :         gf_sg_mfvec2f_del(p->xWarpmap);
   27346           0 :         gf_sg_mfvec2f_del(p->yWarpmap);
   27347           0 :         gf_sg_sfimage_del(p->image_changed);
   27348           0 :         gf_node_free((GF_Node *) p);
   27349           0 : }
   27350             : 
   27351             : static const u16 ProceduralTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   27352             : static const u16 ProceduralTexture_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   27353             : static const u16 ProceduralTexture_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
   27354             : 
   27355             : static u32 ProceduralTexture_get_field_count(GF_Node *node, u8 IndexMode)
   27356             : {
   27357           0 :         switch(IndexMode) {
   27358             :         case GF_SG_FIELD_CODING_IN:
   27359           0 :                 return 19;
   27360             :         case GF_SG_FIELD_CODING_DEF:
   27361           0 :                 return 19;
   27362             :         case GF_SG_FIELD_CODING_OUT:
   27363           0 :                 return 20;
   27364             :         case GF_SG_FIELD_CODING_DYN:
   27365           0 :                 return 0;
   27366             :         default:
   27367           0 :                 return 20;
   27368             :         }
   27369           0 : }
   27370             : 
   27371             : static GF_Err ProceduralTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27372             : {
   27373           0 :         switch(IndexMode) {
   27374             :         case GF_SG_FIELD_CODING_IN:
   27375           0 :                 *allField = ProceduralTexture_In2All[inField];
   27376           0 :                 return GF_OK;
   27377             :         case GF_SG_FIELD_CODING_DEF:
   27378           0 :                 *allField = ProceduralTexture_Def2All[inField];
   27379           0 :                 return GF_OK;
   27380             :         case GF_SG_FIELD_CODING_OUT:
   27381           0 :                 *allField = ProceduralTexture_Out2All[inField];
   27382           0 :                 return GF_OK;
   27383             :         default:
   27384           0 :                 return GF_BAD_PARAM;
   27385             :         }
   27386           0 : }
   27387             : static GF_Err ProceduralTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   27388             : {
   27389           0 :         switch (info->fieldIndex) {
   27390             :         case 0:
   27391           0 :                 info->name = "aSmooth";
   27392           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27393           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27394           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->aSmooth;
   27395           0 :                 return GF_OK;
   27396             :         case 1:
   27397           0 :                 info->name = "aWarpmap";
   27398           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27399           0 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27400           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->aWarpmap;
   27401           0 :                 return GF_OK;
   27402             :         case 2:
   27403           0 :                 info->name = "aWeights";
   27404           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27405           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27406           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->aWeights;
   27407           0 :                 return GF_OK;
   27408             :         case 3:
   27409           0 :                 info->name = "bSmooth";
   27410           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27411           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27412           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->bSmooth;
   27413           0 :                 return GF_OK;
   27414             :         case 4:
   27415           0 :                 info->name = "bWarpmap";
   27416           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27417           0 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27418           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->bWarpmap;
   27419           0 :                 return GF_OK;
   27420             :         case 5:
   27421           0 :                 info->name = "bWeights";
   27422           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27423           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27424           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->bWeights;
   27425           0 :                 return GF_OK;
   27426             :         case 6:
   27427           0 :                 info->name = "cellWidth";
   27428           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27429           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27430           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->cellWidth;
   27431           0 :                 return GF_OK;
   27432             :         case 7:
   27433           0 :                 info->name = "cellHeight";
   27434           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27435           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27436           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->cellHeight;
   27437           0 :                 return GF_OK;
   27438             :         case 8:
   27439           0 :                 info->name = "color";
   27440           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27441           0 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   27442           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->color;
   27443           0 :                 return GF_OK;
   27444             :         case 9:
   27445           0 :                 info->name = "distortion";
   27446           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27447           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   27448           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->distortion;
   27449           0 :                 return GF_OK;
   27450             :         case 10:
   27451           0 :                 info->name = "height";
   27452           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27453           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27454           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->height;
   27455           0 :                 return GF_OK;
   27456             :         case 11:
   27457           0 :                 info->name = "roughness";
   27458           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27459           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27460           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->roughness;
   27461           0 :                 return GF_OK;
   27462             :         case 12:
   27463           0 :                 info->name = "seed";
   27464           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27465           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27466           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->seed;
   27467           0 :                 return GF_OK;
   27468             :         case 13:
   27469           0 :                 info->name = "type";
   27470           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27471           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27472           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->type;
   27473           0 :                 return GF_OK;
   27474             :         case 14:
   27475           0 :                 info->name = "xSmooth";
   27476           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27477           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27478           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->xSmooth;
   27479           0 :                 return GF_OK;
   27480             :         case 15:
   27481           0 :                 info->name = "xWarpmap";
   27482           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27483           0 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27484           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->xWarpmap;
   27485           0 :                 return GF_OK;
   27486             :         case 16:
   27487           0 :                 info->name = "ySmooth";
   27488           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27489           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27490           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->ySmooth;
   27491           0 :                 return GF_OK;
   27492             :         case 17:
   27493           0 :                 info->name = "yWarpmap";
   27494           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27495           0 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27496           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->yWarpmap;
   27497           0 :                 return GF_OK;
   27498             :         case 18:
   27499           0 :                 info->name = "width";
   27500           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27501           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27502           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->width;
   27503           0 :                 return GF_OK;
   27504             :         case 19:
   27505           0 :                 info->name = "image_changed";
   27506           0 :                 info->eventType = GF_SG_EVENT_OUT;
   27507           0 :                 info->fieldType = GF_SG_VRML_SFIMAGE;
   27508           0 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->image_changed;
   27509           0 :                 return GF_OK;
   27510             :         default:
   27511           0 :                 return GF_BAD_PARAM;
   27512             :         }
   27513           0 : }
   27514             : 
   27515             : 
   27516             : static s32 ProceduralTexture_get_field_index_by_name(char *name)
   27517             : {
   27518           0 :         if (!strcmp("aSmooth", name)) return 0;
   27519           0 :         if (!strcmp("aWarpmap", name)) return 1;
   27520           0 :         if (!strcmp("aWeights", name)) return 2;
   27521           0 :         if (!strcmp("bSmooth", name)) return 3;
   27522           0 :         if (!strcmp("bWarpmap", name)) return 4;
   27523           0 :         if (!strcmp("bWeights", name)) return 5;
   27524           0 :         if (!strcmp("cellWidth", name)) return 6;
   27525           0 :         if (!strcmp("cellHeight", name)) return 7;
   27526           0 :         if (!strcmp("color", name)) return 8;
   27527           0 :         if (!strcmp("distortion", name)) return 9;
   27528           0 :         if (!strcmp("height", name)) return 10;
   27529           0 :         if (!strcmp("roughness", name)) return 11;
   27530           0 :         if (!strcmp("seed", name)) return 12;
   27531           0 :         if (!strcmp("type", name)) return 13;
   27532           0 :         if (!strcmp("xSmooth", name)) return 14;
   27533           0 :         if (!strcmp("xWarpmap", name)) return 15;
   27534           0 :         if (!strcmp("ySmooth", name)) return 16;
   27535           0 :         if (!strcmp("yWarpmap", name)) return 17;
   27536           0 :         if (!strcmp("width", name)) return 18;
   27537           0 :         if (!strcmp("image_changed", name)) return 19;
   27538           0 :         return -1;
   27539           0 : }
   27540             : static Bool ProceduralTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   27541             : {
   27542           0 :         switch (FieldIndex) {
   27543             :         case 1:
   27544           0 :                 *AType = 0;
   27545           0 :                 *QType = 2;
   27546           0 :                 *b_min = FLT2FIX(0);
   27547           0 :                 *b_max = FLT2FIX(1);
   27548           0 :                 return 1;
   27549             :         case 4:
   27550           0 :                 *AType = 0;
   27551           0 :                 *QType = 2;
   27552           0 :                 *b_min = FLT2FIX(0);
   27553           0 :                 *b_max = FLT2FIX( 1);
   27554           0 :                 return 1;
   27555             :         case 6:
   27556           0 :                 *AType = 0;
   27557           0 :                 *QType = 13;
   27558           0 :                 *QT13_bits = 4;
   27559           0 :                 *b_min = FLT2FIX(0);
   27560           0 :                 *b_max = FLT2FIX(15);
   27561           0 :                 return 1;
   27562             :         case 7:
   27563           0 :                 *AType = 0;
   27564           0 :                 *QType = 13;
   27565           0 :                 *QT13_bits = 4;
   27566           0 :                 *b_min = FLT2FIX(0);
   27567           0 :                 *b_max = FLT2FIX(15);
   27568           0 :                 return 1;
   27569             :         case 8:
   27570           0 :                 *AType = 0;
   27571           0 :                 *QType = 4;
   27572           0 :                 return 1;
   27573             :         case 9:
   27574           0 :                 *AType = 0;
   27575           0 :                 *QType = 13;
   27576           0 :                 *QT13_bits = 16;
   27577           0 :                 *b_min = FLT2FIX(0);
   27578           0 :                 *b_max = FLT2FIX(1);
   27579           0 :                 return 1;
   27580             :         case 10:
   27581           0 :                 *AType = 0;
   27582           0 :                 *QType = 13;
   27583           0 :                 *QT13_bits = 4;
   27584           0 :                 *b_min = FLT2FIX(1);
   27585           0 :                 *b_max = FLT2FIX(15);
   27586           0 :                 return 1;
   27587             :         case 11:
   27588           0 :                 *AType = 0;
   27589           0 :                 *QType = 13;
   27590           0 :                 *QT13_bits = 4;
   27591           0 :                 *b_min = FLT2FIX(0);
   27592           0 :                 *b_max = FLT2FIX(15);
   27593           0 :                 return 1;
   27594             :         case 13:
   27595           0 :                 *AType = 0;
   27596           0 :                 *QType = 13;
   27597           0 :                 *QT13_bits = 3;
   27598           0 :                 *b_min = FLT2FIX(0);
   27599           0 :                 *b_max = FLT2FIX(4);
   27600           0 :                 return 1;
   27601             :         case 15:
   27602           0 :                 *AType = 0;
   27603           0 :                 *QType = 2;
   27604           0 :                 *b_min = FLT2FIX(0);
   27605           0 :                 *b_max = FLT2FIX(1);
   27606           0 :                 return 1;
   27607             :         case 17:
   27608           0 :                 *AType = 0;
   27609           0 :                 *QType = 2;
   27610           0 :                 *b_min = FLT2FIX(0);
   27611           0 :                 *b_max = FLT2FIX(1);
   27612           0 :                 return 1;
   27613             :         case 18:
   27614           0 :                 *AType = 0;
   27615           0 :                 *QType = 13;
   27616           0 :                 *QT13_bits = 4;
   27617           0 :                 *b_min = FLT2FIX(1);
   27618           0 :                 *b_max = FLT2FIX(15);
   27619           0 :                 return 1;
   27620             :         default:
   27621           0 :                 return 0;
   27622             :         }
   27623           0 : }
   27624             : 
   27625             : 
   27626             : 
   27627             : GF_Node *ProceduralTexture_Create()
   27628             : {
   27629             :         M_ProceduralTexture *p;
   27630           0 :         GF_SAFEALLOC(p, M_ProceduralTexture);
   27631           0 :         if(!p) return NULL;
   27632           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ProceduralTexture);
   27633             : 
   27634             :         /*default field values*/
   27635           0 :         p->aWarpmap.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   27636           0 :         p->aWarpmap.count = 2;
   27637           0 :         p->aWarpmap.vals[0].x = FLT2FIX(0);
   27638           0 :         p->aWarpmap.vals[0].y = FLT2FIX(0);
   27639           0 :         p->aWarpmap.vals[1].x = FLT2FIX(1);
   27640           0 :         p->aWarpmap.vals[1].y = FLT2FIX(1);
   27641           0 :         p->aWeights.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*16);
   27642           0 :         p->aWeights.count = 16;
   27643           0 :         p->aWeights.vals[0] = FLT2FIX(0);
   27644           0 :         p->aWeights.vals[1] = FLT2FIX(0);
   27645           0 :         p->aWeights.vals[2] = FLT2FIX(0);
   27646           0 :         p->aWeights.vals[3] = FLT2FIX(0);
   27647           0 :         p->aWeights.vals[4] = FLT2FIX(0);
   27648           0 :         p->aWeights.vals[5] = FLT2FIX(0);
   27649           0 :         p->aWeights.vals[6] = FLT2FIX(0);
   27650           0 :         p->aWeights.vals[7] = FLT2FIX(0);
   27651           0 :         p->aWeights.vals[8] = FLT2FIX(0);
   27652           0 :         p->aWeights.vals[9] = FLT2FIX(0);
   27653           0 :         p->aWeights.vals[10] = FLT2FIX(0);
   27654           0 :         p->aWeights.vals[11] = FLT2FIX(0);
   27655           0 :         p->aWeights.vals[12] = FLT2FIX(1);
   27656           0 :         p->aWeights.vals[13] = FLT2FIX(0);
   27657           0 :         p->aWeights.vals[14] = FLT2FIX(0);
   27658           0 :         p->aWeights.vals[15] = FLT2FIX(0);
   27659           0 :         p->bWarpmap.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   27660           0 :         p->bWarpmap.count = 2;
   27661           0 :         p->bWarpmap.vals[0].x = FLT2FIX(0);
   27662           0 :         p->bWarpmap.vals[0].y = FLT2FIX(0);
   27663           0 :         p->bWarpmap.vals[1].x = FLT2FIX(1);
   27664           0 :         p->bWarpmap.vals[1].y = FLT2FIX(1);
   27665           0 :         p->bWeights.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*16);
   27666           0 :         p->bWeights.count = 16;
   27667           0 :         p->bWeights.vals[0] = FLT2FIX(0);
   27668           0 :         p->bWeights.vals[1] = FLT2FIX(0);
   27669           0 :         p->bWeights.vals[2] = FLT2FIX(0);
   27670           0 :         p->bWeights.vals[3] = FLT2FIX(0);
   27671           0 :         p->bWeights.vals[4] = FLT2FIX(0);
   27672           0 :         p->bWeights.vals[5] = FLT2FIX(1);
   27673           0 :         p->bWeights.vals[6] = FLT2FIX(0);
   27674           0 :         p->bWeights.vals[7] = FLT2FIX(0);
   27675           0 :         p->bWeights.vals[8] = FLT2FIX(0);
   27676           0 :         p->bWeights.vals[9] = FLT2FIX(0);
   27677           0 :         p->bWeights.vals[10] = FLT2FIX(0);
   27678           0 :         p->bWeights.vals[11] = FLT2FIX(0);
   27679           0 :         p->bWeights.vals[12] = FLT2FIX(0);
   27680           0 :         p->bWeights.vals[13] = FLT2FIX(0);
   27681           0 :         p->bWeights.vals[14] = FLT2FIX(0);
   27682           0 :         p->bWeights.vals[15] = FLT2FIX(0);
   27683           0 :         p->cellWidth = 4;
   27684           0 :         p->cellHeight = 4;
   27685           0 :         p->color.vals = (SFColor*)gf_malloc(sizeof(SFColor)*4);
   27686           0 :         p->color.count = 4;
   27687           0 :         p->color.vals[0].red = FLT2FIX(0.3);
   27688           0 :         p->color.vals[0].green = FLT2FIX(0.698);
   27689           0 :         p->color.vals[0].blue = FLT2FIX(1);
   27690           0 :         p->color.vals[1].red = FLT2FIX(0.8);
   27691           0 :         p->color.vals[1].green = FLT2FIX(0.8);
   27692           0 :         p->color.vals[1].blue = FLT2FIX(0.8);
   27693           0 :         p->color.vals[2].red = FLT2FIX(1);
   27694           0 :         p->color.vals[2].green = FLT2FIX(1);
   27695           0 :         p->color.vals[2].blue = FLT2FIX(1);
   27696           0 :         p->color.vals[3].red = FLT2FIX(0);
   27697           0 :         p->color.vals[3].green = FLT2FIX(0);
   27698           0 :         p->color.vals[3].blue = FLT2FIX(0);
   27699           0 :         p->distortion = FLT2FIX(0);
   27700           0 :         p->height = 7;
   27701           0 :         p->roughness = 0;
   27702           0 :         p->seed = 129093;
   27703           0 :         p->type = 0;
   27704           0 :         p->width = 7;
   27705           0 :         return (GF_Node *)p;
   27706           0 : }
   27707             : 
   27708             : 
   27709             : /*
   27710             :         Quadric Node deletion
   27711             : */
   27712             : 
   27713             : static void Quadric_Del(GF_Node *node)
   27714             : {
   27715           0 :         M_Quadric *p = (M_Quadric *) node;
   27716           0 :         gf_sg_mfint32_del(p->densities);
   27717           0 :         gf_node_free((GF_Node *) p);
   27718           0 : }
   27719             : 
   27720             : static const u16 Quadric_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27721             : static const u16 Quadric_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27722             : static const u16 Quadric_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27723             : static const u16 Quadric_Dyn2All[] = { 0, 3, 4, 5, 6, 7, 8};
   27724             : 
   27725             : static u32 Quadric_get_field_count(GF_Node *node, u8 IndexMode)
   27726             : {
   27727           0 :         switch(IndexMode) {
   27728             :         case GF_SG_FIELD_CODING_IN:
   27729           0 :                 return 10;
   27730             :         case GF_SG_FIELD_CODING_DEF:
   27731           0 :                 return 10;
   27732             :         case GF_SG_FIELD_CODING_OUT:
   27733           0 :                 return 10;
   27734             :         case GF_SG_FIELD_CODING_DYN:
   27735           0 :                 return 7;
   27736             :         default:
   27737           0 :                 return 10;
   27738             :         }
   27739           0 : }
   27740             : 
   27741             : static GF_Err Quadric_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27742             : {
   27743           0 :         switch(IndexMode) {
   27744             :         case GF_SG_FIELD_CODING_IN:
   27745           0 :                 *allField = Quadric_In2All[inField];
   27746           0 :                 return GF_OK;
   27747             :         case GF_SG_FIELD_CODING_DEF:
   27748           0 :                 *allField = Quadric_Def2All[inField];
   27749           0 :                 return GF_OK;
   27750             :         case GF_SG_FIELD_CODING_OUT:
   27751           0 :                 *allField = Quadric_Out2All[inField];
   27752           0 :                 return GF_OK;
   27753             :         case GF_SG_FIELD_CODING_DYN:
   27754           0 :                 *allField = Quadric_Dyn2All[inField];
   27755           0 :                 return GF_OK;
   27756             :         default:
   27757           0 :                 return GF_BAD_PARAM;
   27758             :         }
   27759           0 : }
   27760             : static GF_Err Quadric_get_field(GF_Node *node, GF_FieldInfo *info)
   27761             : {
   27762           0 :         switch (info->fieldIndex) {
   27763             :         case 0:
   27764           0 :                 info->name = "bboxSize";
   27765           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27766           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   27767           0 :                 info->far_ptr = & ((M_Quadric *) node)->bboxSize;
   27768           0 :                 return GF_OK;
   27769             :         case 1:
   27770           0 :                 info->name = "densities";
   27771           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27772           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   27773           0 :                 info->far_ptr = & ((M_Quadric *) node)->densities;
   27774           0 :                 return GF_OK;
   27775             :         case 2:
   27776           0 :                 info->name = "dual";
   27777           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27778           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27779           0 :                 info->far_ptr = & ((M_Quadric *) node)->dual;
   27780           0 :                 return GF_OK;
   27781             :         case 3:
   27782           0 :                 info->name = "P0";
   27783           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27784           0 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27785           0 :                 info->far_ptr = & ((M_Quadric *) node)->P0;
   27786           0 :                 return GF_OK;
   27787             :         case 4:
   27788           0 :                 info->name = "P1";
   27789           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27790           0 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27791           0 :                 info->far_ptr = & ((M_Quadric *) node)->P1;
   27792           0 :                 return GF_OK;
   27793             :         case 5:
   27794           0 :                 info->name = "P2";
   27795           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27796           0 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27797           0 :                 info->far_ptr = & ((M_Quadric *) node)->P2;
   27798           0 :                 return GF_OK;
   27799             :         case 6:
   27800           0 :                 info->name = "P3";
   27801           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27802           0 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27803           0 :                 info->far_ptr = & ((M_Quadric *) node)->P3;
   27804           0 :                 return GF_OK;
   27805             :         case 7:
   27806           0 :                 info->name = "P4";
   27807           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27808           0 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27809           0 :                 info->far_ptr = & ((M_Quadric *) node)->P4;
   27810           0 :                 return GF_OK;
   27811             :         case 8:
   27812           0 :                 info->name = "P5";
   27813           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27814           0 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27815           0 :                 info->far_ptr = & ((M_Quadric *) node)->P5;
   27816           0 :                 return GF_OK;
   27817             :         case 9:
   27818           0 :                 info->name = "solid";
   27819           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27820           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27821           0 :                 info->far_ptr = & ((M_Quadric *) node)->solid;
   27822           0 :                 return GF_OK;
   27823             :         default:
   27824           0 :                 return GF_BAD_PARAM;
   27825             :         }
   27826           0 : }
   27827             : 
   27828             : 
   27829             : static s32 Quadric_get_field_index_by_name(char *name)
   27830             : {
   27831           0 :         if (!strcmp("bboxSize", name)) return 0;
   27832           0 :         if (!strcmp("densities", name)) return 1;
   27833           0 :         if (!strcmp("dual", name)) return 2;
   27834           0 :         if (!strcmp("P0", name)) return 3;
   27835           0 :         if (!strcmp("P1", name)) return 4;
   27836           0 :         if (!strcmp("P2", name)) return 5;
   27837           0 :         if (!strcmp("P3", name)) return 6;
   27838           0 :         if (!strcmp("P4", name)) return 7;
   27839           0 :         if (!strcmp("P5", name)) return 8;
   27840           0 :         if (!strcmp("solid", name)) return 9;
   27841           0 :         return -1;
   27842           0 : }
   27843             : static Bool Quadric_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   27844             : {
   27845           0 :         switch (FieldIndex) {
   27846             :         case 0:
   27847           0 :                 *AType = 11;
   27848           0 :                 *QType = 11;
   27849           0 :                 *b_min = FLT2FIX(0);
   27850           0 :                 *b_max = FIX_MAX;
   27851           0 :                 return 1;
   27852             :         case 3:
   27853           0 :                 *AType = 15;
   27854           0 :                 *QType = 15;
   27855           0 :                 *b_min = FIX_MIN;
   27856           0 :                 *b_max = FIX_MAX;
   27857           0 :                 return 1;
   27858             :         case 4:
   27859           0 :                 *AType = 15;
   27860           0 :                 *QType = 15;
   27861           0 :                 *b_min = FIX_MIN;
   27862           0 :                 *b_max = FIX_MAX;
   27863           0 :                 return 1;
   27864             :         case 5:
   27865           0 :                 *AType = 15;
   27866           0 :                 *QType = 15;
   27867           0 :                 *b_min = FIX_MIN;
   27868           0 :                 *b_max = FIX_MAX;
   27869           0 :                 return 1;
   27870             :         case 6:
   27871           0 :                 *AType = 15;
   27872           0 :                 *QType = 15;
   27873           0 :                 *b_min = FIX_MIN;
   27874           0 :                 *b_max = FIX_MAX;
   27875           0 :                 return 1;
   27876             :         case 7:
   27877           0 :                 *AType = 15;
   27878           0 :                 *QType = 15;
   27879           0 :                 *b_min = FIX_MIN;
   27880           0 :                 *b_max = FIX_MAX;
   27881           0 :                 return 1;
   27882             :         case 8:
   27883           0 :                 *AType = 15;
   27884           0 :                 *QType = 15;
   27885           0 :                 *b_min = FIX_MIN;
   27886           0 :                 *b_max = FIX_MAX;
   27887           0 :                 return 1;
   27888             :         default:
   27889           0 :                 return 0;
   27890             :         }
   27891           0 : }
   27892             : 
   27893             : 
   27894             : 
   27895             : GF_Node *Quadric_Create()
   27896             : {
   27897             :         M_Quadric *p;
   27898           0 :         GF_SAFEALLOC(p, M_Quadric);
   27899           0 :         if(!p) return NULL;
   27900           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Quadric);
   27901             : 
   27902             :         /*default field values*/
   27903           0 :         p->bboxSize.x = FLT2FIX(2);
   27904           0 :         p->bboxSize.y = FLT2FIX(2);
   27905           0 :         p->bboxSize.z = FLT2FIX(2);
   27906           0 :         p->P0.x = FLT2FIX(-1);
   27907           0 :         p->P0.y = FLT2FIX(0);
   27908           0 :         p->P0.z = FLT2FIX(0);
   27909           0 :         p->P0.q = FLT2FIX(1);
   27910           0 :         p->P1.x = FLT2FIX(1);
   27911           0 :         p->P1.y = FLT2FIX(0);
   27912           0 :         p->P1.z = FLT2FIX(0);
   27913           0 :         p->P1.q = FLT2FIX(1);
   27914           0 :         p->P2.x = FLT2FIX(0);
   27915           0 :         p->P2.y = FLT2FIX(1);
   27916           0 :         p->P2.z = FLT2FIX(0);
   27917           0 :         p->P2.q = FLT2FIX(0);
   27918           0 :         p->P3.x = FLT2FIX(0);
   27919           0 :         p->P3.y = FLT2FIX(0);
   27920           0 :         p->P3.z = FLT2FIX(1);
   27921           0 :         p->P3.q = FLT2FIX(0);
   27922           0 :         p->P4.x = FLT2FIX(0);
   27923           0 :         p->P4.y = FLT2FIX(1);
   27924           0 :         p->P4.z = FLT2FIX(0);
   27925           0 :         p->P4.q = FLT2FIX(1);
   27926           0 :         p->P5.x = FLT2FIX(0);
   27927           0 :         p->P5.y = FLT2FIX(0);
   27928           0 :         p->P5.z = FLT2FIX(1);
   27929           0 :         p->P5.q = FLT2FIX(1);
   27930           0 :         return (GF_Node *)p;
   27931           0 : }
   27932             : 
   27933             : 
   27934             : /*
   27935             :         SBBone Node deletion
   27936             : */
   27937             : 
   27938             : static void SBBone_Del(GF_Node *node)
   27939             : {
   27940           0 :         M_SBBone *p = (M_SBBone *) node;
   27941           0 :         gf_sg_mffloat_del(p->ikPitchLimit);
   27942           0 :         gf_sg_mffloat_del(p->ikRollLimit);
   27943           0 :         gf_sg_mffloat_del(p->ikTxLimit);
   27944           0 :         gf_sg_mffloat_del(p->ikTyLimit);
   27945           0 :         gf_sg_mffloat_del(p->ikTzLimit);
   27946           0 :         gf_sg_mffloat_del(p->ikYawLimit);
   27947           0 :         gf_sg_mffloat_del(p->sectionInner);
   27948           0 :         gf_sg_mffloat_del(p->sectionOuter);
   27949           0 :         gf_sg_mffloat_del(p->sectionPosition);
   27950           0 :         gf_sg_mfint32_del(p->skinCoordIndex);
   27951           0 :         gf_sg_mffloat_del(p->skinCoordWeight);
   27952           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   27953           0 :         gf_node_free((GF_Node *) p);
   27954           0 : }
   27955             : 
   27956             : static const u16 SBBone_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
   27957             : static const u16 SBBone_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
   27958             : static const u16 SBBone_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
   27959             : static const u16 SBBone_Dyn2All[] = { 3, 5, 14, 16, 17, 23};
   27960             : 
   27961             : static u32 SBBone_get_field_count(GF_Node *node, u8 IndexMode)
   27962             : {
   27963           0 :         switch(IndexMode) {
   27964             :         case GF_SG_FIELD_CODING_IN:
   27965           0 :                 return 24;
   27966             :         case GF_SG_FIELD_CODING_DEF:
   27967           0 :                 return 22;
   27968             :         case GF_SG_FIELD_CODING_OUT:
   27969           0 :                 return 22;
   27970             :         case GF_SG_FIELD_CODING_DYN:
   27971           0 :                 return 6;
   27972             :         default:
   27973           0 :                 return 24;
   27974             :         }
   27975           0 : }
   27976             : 
   27977             : static GF_Err SBBone_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27978             : {
   27979           0 :         switch(IndexMode) {
   27980             :         case GF_SG_FIELD_CODING_IN:
   27981           0 :                 *allField = SBBone_In2All[inField];
   27982           0 :                 return GF_OK;
   27983             :         case GF_SG_FIELD_CODING_DEF:
   27984           0 :                 *allField = SBBone_Def2All[inField];
   27985           0 :                 return GF_OK;
   27986             :         case GF_SG_FIELD_CODING_OUT:
   27987           0 :                 *allField = SBBone_Out2All[inField];
   27988           0 :                 return GF_OK;
   27989             :         case GF_SG_FIELD_CODING_DYN:
   27990           0 :                 *allField = SBBone_Dyn2All[inField];
   27991           0 :                 return GF_OK;
   27992             :         default:
   27993           0 :                 return GF_BAD_PARAM;
   27994             :         }
   27995           0 : }
   27996             : static GF_Err SBBone_get_field(GF_Node *node, GF_FieldInfo *info)
   27997             : {
   27998           0 :         switch (info->fieldIndex) {
   27999             :         case 0:
   28000           0 :                 info->name = "addChildren";
   28001           0 :                 info->eventType = GF_SG_EVENT_IN;
   28002           0 :                 info->on_event_in = ((M_SBBone *)node)->on_addChildren;
   28003           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28004           0 :                 info->NDTtype = NDT_SF3DNode;
   28005           0 :                 info->far_ptr = & ((M_SBBone *)node)->addChildren;
   28006           0 :                 return GF_OK;
   28007             :         case 1:
   28008           0 :                 info->name = "removeChildren";
   28009           0 :                 info->eventType = GF_SG_EVENT_IN;
   28010           0 :                 info->on_event_in = ((M_SBBone *)node)->on_removeChildren;
   28011           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28012           0 :                 info->NDTtype = NDT_SF3DNode;
   28013           0 :                 info->far_ptr = & ((M_SBBone *)node)->removeChildren;
   28014           0 :                 return GF_OK;
   28015             :         case 2:
   28016           0 :                 info->name = "boneID";
   28017           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28018           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28019           0 :                 info->far_ptr = & ((M_SBBone *) node)->boneID;
   28020           0 :                 return GF_OK;
   28021             :         case 3:
   28022           0 :                 info->name = "center";
   28023           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28024           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28025           0 :                 info->far_ptr = & ((M_SBBone *) node)->center;
   28026           0 :                 return GF_OK;
   28027             :         case 4:
   28028           0 :                 info->name = "children";
   28029           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28030           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28031           0 :                 info->NDTtype = NDT_SF3DNode;
   28032           0 :                 info->far_ptr = & ((M_SBBone *)node)->children;
   28033           0 :                 return GF_OK;
   28034             :         case 5:
   28035           0 :                 info->name = "endpoint";
   28036           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28037           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28038           0 :                 info->far_ptr = & ((M_SBBone *) node)->endpoint;
   28039           0 :                 return GF_OK;
   28040             :         case 6:
   28041           0 :                 info->name = "falloff";
   28042           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28043           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28044           0 :                 info->far_ptr = & ((M_SBBone *) node)->falloff;
   28045           0 :                 return GF_OK;
   28046             :         case 7:
   28047           0 :                 info->name = "ikChainPosition";
   28048           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28049           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28050           0 :                 info->far_ptr = & ((M_SBBone *) node)->ikChainPosition;
   28051           0 :                 return GF_OK;
   28052             :         case 8:
   28053           0 :                 info->name = "ikPitchLimit";
   28054           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28055           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28056           0 :                 info->far_ptr = & ((M_SBBone *) node)->ikPitchLimit;
   28057           0 :                 return GF_OK;
   28058             :         case 9:
   28059           0 :                 info->name = "ikRollLimit";
   28060           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28061           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28062           0 :                 info->far_ptr = & ((M_SBBone *) node)->ikRollLimit;
   28063           0 :                 return GF_OK;
   28064             :         case 10:
   28065           0 :                 info->name = "ikTxLimit";
   28066           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28067           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28068           0 :                 info->far_ptr = & ((M_SBBone *) node)->ikTxLimit;
   28069           0 :                 return GF_OK;
   28070             :         case 11:
   28071           0 :                 info->name = "ikTyLimit";
   28072           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28073           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28074           0 :                 info->far_ptr = & ((M_SBBone *) node)->ikTyLimit;
   28075           0 :                 return GF_OK;
   28076             :         case 12:
   28077           0 :                 info->name = "ikTzLimit";
   28078           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28079           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28080           0 :                 info->far_ptr = & ((M_SBBone *) node)->ikTzLimit;
   28081           0 :                 return GF_OK;
   28082             :         case 13:
   28083           0 :                 info->name = "ikYawLimit";
   28084           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28085           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28086           0 :                 info->far_ptr = & ((M_SBBone *) node)->ikYawLimit;
   28087           0 :                 return GF_OK;
   28088             :         case 14:
   28089           0 :                 info->name = "rotation";
   28090           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28091           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28092           0 :                 info->far_ptr = & ((M_SBBone *) node)->rotation;
   28093           0 :                 return GF_OK;
   28094             :         case 15:
   28095           0 :                 info->name = "rotationOrder";
   28096           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28097           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28098           0 :                 info->far_ptr = & ((M_SBBone *) node)->rotationOrder;
   28099           0 :                 return GF_OK;
   28100             :         case 16:
   28101           0 :                 info->name = "scale";
   28102           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28103           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28104           0 :                 info->far_ptr = & ((M_SBBone *) node)->scale;
   28105           0 :                 return GF_OK;
   28106             :         case 17:
   28107           0 :                 info->name = "scaleOrientation";
   28108           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28109           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28110           0 :                 info->far_ptr = & ((M_SBBone *) node)->scaleOrientation;
   28111           0 :                 return GF_OK;
   28112             :         case 18:
   28113           0 :                 info->name = "sectionInner";
   28114           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28115           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28116           0 :                 info->far_ptr = & ((M_SBBone *) node)->sectionInner;
   28117           0 :                 return GF_OK;
   28118             :         case 19:
   28119           0 :                 info->name = "sectionOuter";
   28120           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28121           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28122           0 :                 info->far_ptr = & ((M_SBBone *) node)->sectionOuter;
   28123           0 :                 return GF_OK;
   28124             :         case 20:
   28125           0 :                 info->name = "sectionPosition";
   28126           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28127           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28128           0 :                 info->far_ptr = & ((M_SBBone *) node)->sectionPosition;
   28129           0 :                 return GF_OK;
   28130             :         case 21:
   28131           0 :                 info->name = "skinCoordIndex";
   28132           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28133           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   28134           0 :                 info->far_ptr = & ((M_SBBone *) node)->skinCoordIndex;
   28135           0 :                 return GF_OK;
   28136             :         case 22:
   28137           0 :                 info->name = "skinCoordWeight";
   28138           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28139           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28140           0 :                 info->far_ptr = & ((M_SBBone *) node)->skinCoordWeight;
   28141           0 :                 return GF_OK;
   28142             :         case 23:
   28143           0 :                 info->name = "translation";
   28144           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28145           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28146           0 :                 info->far_ptr = & ((M_SBBone *) node)->translation;
   28147           0 :                 return GF_OK;
   28148             :         default:
   28149           0 :                 return GF_BAD_PARAM;
   28150             :         }
   28151           0 : }
   28152             : 
   28153             : 
   28154             : static s32 SBBone_get_field_index_by_name(char *name)
   28155             : {
   28156           0 :         if (!strcmp("addChildren", name)) return 0;
   28157           0 :         if (!strcmp("removeChildren", name)) return 1;
   28158           0 :         if (!strcmp("boneID", name)) return 2;
   28159           0 :         if (!strcmp("center", name)) return 3;
   28160           0 :         if (!strcmp("children", name)) return 4;
   28161           0 :         if (!strcmp("endpoint", name)) return 5;
   28162           0 :         if (!strcmp("falloff", name)) return 6;
   28163           0 :         if (!strcmp("ikChainPosition", name)) return 7;
   28164           0 :         if (!strcmp("ikPitchLimit", name)) return 8;
   28165           0 :         if (!strcmp("ikRollLimit", name)) return 9;
   28166           0 :         if (!strcmp("ikTxLimit", name)) return 10;
   28167           0 :         if (!strcmp("ikTyLimit", name)) return 11;
   28168           0 :         if (!strcmp("ikTzLimit", name)) return 12;
   28169           0 :         if (!strcmp("ikYawLimit", name)) return 13;
   28170           0 :         if (!strcmp("rotation", name)) return 14;
   28171           0 :         if (!strcmp("rotationOrder", name)) return 15;
   28172           0 :         if (!strcmp("scale", name)) return 16;
   28173           0 :         if (!strcmp("scaleOrientation", name)) return 17;
   28174           0 :         if (!strcmp("sectionInner", name)) return 18;
   28175           0 :         if (!strcmp("sectionOuter", name)) return 19;
   28176           0 :         if (!strcmp("sectionPosition", name)) return 20;
   28177           0 :         if (!strcmp("skinCoordIndex", name)) return 21;
   28178           0 :         if (!strcmp("skinCoordWeight", name)) return 22;
   28179           0 :         if (!strcmp("translation", name)) return 23;
   28180           0 :         return -1;
   28181           0 : }
   28182             : static Bool SBBone_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28183             : {
   28184           0 :         switch (FieldIndex) {
   28185             :         case 2:
   28186           0 :                 *AType = 0;
   28187           0 :                 *QType = 13;
   28188           0 :                 *QT13_bits = 10;
   28189           0 :                 *b_min = FLT2FIX(0);
   28190           0 :                 *b_max = FLT2FIX(1023);
   28191           0 :                 return 1;
   28192             :         case 3:
   28193           0 :                 *AType = 1;
   28194           0 :                 *QType = 1;
   28195           0 :                 return 1;
   28196             :         case 5:
   28197           0 :                 *AType = 1;
   28198           0 :                 *QType = 1;
   28199           0 :                 return 1;
   28200             :         case 6:
   28201           0 :                 *AType = 0;
   28202           0 :                 *QType = 13;
   28203           0 :                 *QT13_bits = 3;
   28204           0 :                 *b_min = FLT2FIX(-1);
   28205           0 :                 *b_max = FLT2FIX(4);
   28206           0 :                 return 1;
   28207             :         case 7:
   28208           0 :                 *AType = 0;
   28209           0 :                 *QType = 13;
   28210           0 :                 *QT13_bits = 2;
   28211           0 :                 *b_min = FLT2FIX(0);
   28212           0 :                 *b_max = FLT2FIX(3);
   28213           0 :                 return 1;
   28214             :         case 14:
   28215           0 :                 *AType = 10;
   28216           0 :                 *QType = 10;
   28217           0 :                 return 1;
   28218             :         case 15:
   28219           0 :                 *AType = 0;
   28220           0 :                 *QType = 13;
   28221           0 :                 *QT13_bits = 5;
   28222           0 :                 *b_min = FLT2FIX(0);
   28223           0 :                 *b_max = FLT2FIX(23);
   28224           0 :                 return 1;
   28225             :         case 16:
   28226           0 :                 *AType = 11;
   28227           0 :                 *QType = 7;
   28228           0 :                 return 1;
   28229             :         case 17:
   28230           0 :                 *AType = 10;
   28231           0 :                 *QType = 10;
   28232           0 :                 return 1;
   28233             :         case 21:
   28234           0 :                 *AType = 0;
   28235           0 :                 *QType = 14;
   28236           0 :                 return 1;
   28237             :         case 23:
   28238           0 :                 *AType = 1;
   28239           0 :                 *QType = 1;
   28240           0 :                 return 1;
   28241             :         default:
   28242           0 :                 return 0;
   28243             :         }
   28244           0 : }
   28245             : 
   28246             : 
   28247             : 
   28248             : GF_Node *SBBone_Create()
   28249             : {
   28250             :         M_SBBone *p;
   28251           0 :         GF_SAFEALLOC(p, M_SBBone);
   28252           0 :         if(!p) return NULL;
   28253           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBBone);
   28254           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   28255             : 
   28256             :         /*default field values*/
   28257           0 :         p->boneID = 0;
   28258           0 :         p->center.x = FLT2FIX(0);
   28259           0 :         p->center.y = FLT2FIX(0);
   28260           0 :         p->center.z = FLT2FIX(0);
   28261           0 :         p->endpoint.x = FLT2FIX(0);
   28262           0 :         p->endpoint.y = FLT2FIX(0);
   28263           0 :         p->endpoint.z = FLT2FIX(1);
   28264           0 :         p->falloff = 1;
   28265           0 :         p->ikChainPosition = 0;
   28266           0 :         p->rotation.x = FLT2FIX(0);
   28267           0 :         p->rotation.y = FLT2FIX(0);
   28268           0 :         p->rotation.z = FLT2FIX(1);
   28269           0 :         p->rotation.q = FLT2FIX(0);
   28270           0 :         p->rotationOrder = 0;
   28271           0 :         p->scale.x = FLT2FIX(0);
   28272           0 :         p->scale.y = FLT2FIX(0);
   28273           0 :         p->scale.z = FLT2FIX(0);
   28274           0 :         p->scaleOrientation.x = FLT2FIX(0);
   28275           0 :         p->scaleOrientation.y = FLT2FIX(0);
   28276           0 :         p->scaleOrientation.z = FLT2FIX(1);
   28277           0 :         p->scaleOrientation.q = FLT2FIX(0);
   28278           0 :         p->translation.x = FLT2FIX(0);
   28279           0 :         p->translation.y = FLT2FIX(0);
   28280           0 :         p->translation.z = FLT2FIX(0);
   28281           0 :         return (GF_Node *)p;
   28282           0 : }
   28283             : 
   28284             : 
   28285             : /*
   28286             :         SBMuscle Node deletion
   28287             : */
   28288             : 
   28289             : static void SBMuscle_Del(GF_Node *node)
   28290             : {
   28291           0 :         M_SBMuscle *p = (M_SBMuscle *) node;
   28292           0 :         gf_node_unregister((GF_Node *) p->muscleCurve, (GF_Node *) p);
   28293           0 :         gf_sg_mfint32_del(p->skinCoordIndex);
   28294           0 :         gf_sg_mffloat_del(p->skinCoordWeight);
   28295           0 :         gf_node_free((GF_Node *) p);
   28296           0 : }
   28297             : 
   28298             : static const u16 SBMuscle_Def2All[] = { 0, 1, 2, 3, 4, 5};
   28299             : static const u16 SBMuscle_In2All[] = { 0, 1, 2, 3, 4, 5};
   28300             : static const u16 SBMuscle_Out2All[] = { 0, 1, 2, 3, 4, 5};
   28301             : static const u16 SBMuscle_Dyn2All[] = { 3};
   28302             : 
   28303             : static u32 SBMuscle_get_field_count(GF_Node *node, u8 IndexMode)
   28304             : {
   28305           0 :         switch(IndexMode) {
   28306             :         case GF_SG_FIELD_CODING_IN:
   28307           0 :                 return 6;
   28308             :         case GF_SG_FIELD_CODING_DEF:
   28309           0 :                 return 6;
   28310             :         case GF_SG_FIELD_CODING_OUT:
   28311           0 :                 return 6;
   28312             :         case GF_SG_FIELD_CODING_DYN:
   28313           0 :                 return 1;
   28314             :         default:
   28315           0 :                 return 6;
   28316             :         }
   28317           0 : }
   28318             : 
   28319             : static GF_Err SBMuscle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   28320             : {
   28321           0 :         switch(IndexMode) {
   28322             :         case GF_SG_FIELD_CODING_IN:
   28323           0 :                 *allField = SBMuscle_In2All[inField];
   28324           0 :                 return GF_OK;
   28325             :         case GF_SG_FIELD_CODING_DEF:
   28326           0 :                 *allField = SBMuscle_Def2All[inField];
   28327           0 :                 return GF_OK;
   28328             :         case GF_SG_FIELD_CODING_OUT:
   28329           0 :                 *allField = SBMuscle_Out2All[inField];
   28330           0 :                 return GF_OK;
   28331             :         case GF_SG_FIELD_CODING_DYN:
   28332           0 :                 *allField = SBMuscle_Dyn2All[inField];
   28333           0 :                 return GF_OK;
   28334             :         default:
   28335           0 :                 return GF_BAD_PARAM;
   28336             :         }
   28337           0 : }
   28338             : static GF_Err SBMuscle_get_field(GF_Node *node, GF_FieldInfo *info)
   28339             : {
   28340           0 :         switch (info->fieldIndex) {
   28341             :         case 0:
   28342           0 :                 info->name = "falloff";
   28343           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28344           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28345           0 :                 info->far_ptr = & ((M_SBMuscle *) node)->falloff;
   28346           0 :                 return GF_OK;
   28347             :         case 1:
   28348           0 :                 info->name = "muscleCurve";
   28349           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28350           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28351           0 :                 info->NDTtype = NDT_SFGeometryNode;
   28352           0 :                 info->far_ptr = & ((M_SBMuscle *)node)->muscleCurve;
   28353           0 :                 return GF_OK;
   28354             :         case 2:
   28355           0 :                 info->name = "muscleID";
   28356           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28357           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28358           0 :                 info->far_ptr = & ((M_SBMuscle *) node)->muscleID;
   28359           0 :                 return GF_OK;
   28360             :         case 3:
   28361           0 :                 info->name = "radius";
   28362           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28363           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28364           0 :                 info->far_ptr = & ((M_SBMuscle *) node)->radius;
   28365           0 :                 return GF_OK;
   28366             :         case 4:
   28367           0 :                 info->name = "skinCoordIndex";
   28368           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28369           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   28370           0 :                 info->far_ptr = & ((M_SBMuscle *) node)->skinCoordIndex;
   28371           0 :                 return GF_OK;
   28372             :         case 5:
   28373           0 :                 info->name = "skinCoordWeight";
   28374           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28375           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28376           0 :                 info->far_ptr = & ((M_SBMuscle *) node)->skinCoordWeight;
   28377           0 :                 return GF_OK;
   28378             :         default:
   28379           0 :                 return GF_BAD_PARAM;
   28380             :         }
   28381           0 : }
   28382             : 
   28383             : 
   28384             : static s32 SBMuscle_get_field_index_by_name(char *name)
   28385             : {
   28386           0 :         if (!strcmp("falloff", name)) return 0;
   28387           0 :         if (!strcmp("muscleCurve", name)) return 1;
   28388           0 :         if (!strcmp("muscleID", name)) return 2;
   28389           0 :         if (!strcmp("radius", name)) return 3;
   28390           0 :         if (!strcmp("skinCoordIndex", name)) return 4;
   28391           0 :         if (!strcmp("skinCoordWeight", name)) return 5;
   28392           0 :         return -1;
   28393           0 : }
   28394             : static Bool SBMuscle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28395             : {
   28396           0 :         switch (FieldIndex) {
   28397             :         case 0:
   28398           0 :                 *AType = 0;
   28399           0 :                 *QType = 13;
   28400           0 :                 *QT13_bits = 3;
   28401           0 :                 *b_min = FLT2FIX(-1);
   28402           0 :                 *b_max = FLT2FIX(4);
   28403           0 :                 return 1;
   28404             :         case 2:
   28405           0 :                 *AType = 0;
   28406           0 :                 *QType = 13;
   28407           0 :                 *QT13_bits = 10;
   28408           0 :                 *b_min = FLT2FIX(0);
   28409           0 :                 *b_max = FLT2FIX(1023);
   28410           0 :                 return 1;
   28411             :         case 3:
   28412           0 :                 *AType = 11;
   28413           0 :                 *QType = 7;
   28414           0 :                 return 1;
   28415             :         case 4:
   28416           0 :                 *AType = 0;
   28417           0 :                 *QType = 14;
   28418           0 :                 *b_min = FLT2FIX(0);
   28419           0 :                 *b_max = FIX_MAX;
   28420           0 :                 return 1;
   28421             :         default:
   28422           0 :                 return 0;
   28423             :         }
   28424           0 : }
   28425             : 
   28426             : 
   28427             : 
   28428             : GF_Node *SBMuscle_Create()
   28429             : {
   28430             :         M_SBMuscle *p;
   28431           0 :         GF_SAFEALLOC(p, M_SBMuscle);
   28432           0 :         if(!p) return NULL;
   28433           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBMuscle);
   28434             : 
   28435             :         /*default field values*/
   28436           0 :         p->falloff = 1;
   28437           0 :         p->muscleID = 0;
   28438           0 :         p->radius = 1;
   28439           0 :         return (GF_Node *)p;
   28440           0 : }
   28441             : 
   28442             : 
   28443             : /*
   28444             :         SBSegment Node deletion
   28445             : */
   28446             : 
   28447             : static void SBSegment_Del(GF_Node *node)
   28448             : {
   28449           0 :         M_SBSegment *p = (M_SBSegment *) node;
   28450           0 :         gf_sg_mfvec3f_del(p->momentsOfInertia);
   28451           0 :         gf_sg_sfstring_del(p->name);
   28452           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   28453           0 :         gf_node_free((GF_Node *) p);
   28454           0 : }
   28455             : 
   28456             : static const u16 SBSegment_Def2All[] = { 2, 3, 4, 5, 6};
   28457             : static const u16 SBSegment_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   28458             : static const u16 SBSegment_Out2All[] = { 2, 3, 4, 5, 6};
   28459             : static const u16 SBSegment_Dyn2All[] = { 2};
   28460             : 
   28461             : static u32 SBSegment_get_field_count(GF_Node *node, u8 IndexMode)
   28462             : {
   28463           0 :         switch(IndexMode) {
   28464             :         case GF_SG_FIELD_CODING_IN:
   28465           0 :                 return 7;
   28466             :         case GF_SG_FIELD_CODING_DEF:
   28467           0 :                 return 5;
   28468             :         case GF_SG_FIELD_CODING_OUT:
   28469           0 :                 return 5;
   28470             :         case GF_SG_FIELD_CODING_DYN:
   28471           0 :                 return 1;
   28472             :         default:
   28473           0 :                 return 7;
   28474             :         }
   28475           0 : }
   28476             : 
   28477             : static GF_Err SBSegment_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   28478             : {
   28479           0 :         switch(IndexMode) {
   28480             :         case GF_SG_FIELD_CODING_IN:
   28481           0 :                 *allField = SBSegment_In2All[inField];
   28482           0 :                 return GF_OK;
   28483             :         case GF_SG_FIELD_CODING_DEF:
   28484           0 :                 *allField = SBSegment_Def2All[inField];
   28485           0 :                 return GF_OK;
   28486             :         case GF_SG_FIELD_CODING_OUT:
   28487           0 :                 *allField = SBSegment_Out2All[inField];
   28488           0 :                 return GF_OK;
   28489             :         case GF_SG_FIELD_CODING_DYN:
   28490           0 :                 *allField = SBSegment_Dyn2All[inField];
   28491           0 :                 return GF_OK;
   28492             :         default:
   28493           0 :                 return GF_BAD_PARAM;
   28494             :         }
   28495           0 : }
   28496             : static GF_Err SBSegment_get_field(GF_Node *node, GF_FieldInfo *info)
   28497             : {
   28498           0 :         switch (info->fieldIndex) {
   28499             :         case 0:
   28500           0 :                 info->name = "addChildren";
   28501           0 :                 info->eventType = GF_SG_EVENT_IN;
   28502           0 :                 info->on_event_in = ((M_SBSegment *)node)->on_addChildren;
   28503           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28504           0 :                 info->NDTtype = NDT_SF3DNode;
   28505           0 :                 info->far_ptr = & ((M_SBSegment *)node)->addChildren;
   28506           0 :                 return GF_OK;
   28507             :         case 1:
   28508           0 :                 info->name = "removeChildren";
   28509           0 :                 info->eventType = GF_SG_EVENT_IN;
   28510           0 :                 info->on_event_in = ((M_SBSegment *)node)->on_removeChildren;
   28511           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28512           0 :                 info->NDTtype = NDT_SF3DNode;
   28513           0 :                 info->far_ptr = & ((M_SBSegment *)node)->removeChildren;
   28514           0 :                 return GF_OK;
   28515             :         case 2:
   28516           0 :                 info->name = "centerOfMass";
   28517           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28518           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28519           0 :                 info->far_ptr = & ((M_SBSegment *) node)->centerOfMass;
   28520           0 :                 return GF_OK;
   28521             :         case 3:
   28522           0 :                 info->name = "children";
   28523           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28524           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28525           0 :                 info->NDTtype = NDT_SF3DNode;
   28526           0 :                 info->far_ptr = & ((M_SBSegment *)node)->children;
   28527           0 :                 return GF_OK;
   28528             :         case 4:
   28529           0 :                 info->name = "mass";
   28530           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28531           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   28532           0 :                 info->far_ptr = & ((M_SBSegment *) node)->mass;
   28533           0 :                 return GF_OK;
   28534             :         case 5:
   28535           0 :                 info->name = "momentsOfInertia";
   28536           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28537           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   28538           0 :                 info->far_ptr = & ((M_SBSegment *) node)->momentsOfInertia;
   28539           0 :                 return GF_OK;
   28540             :         case 6:
   28541           0 :                 info->name = "name";
   28542           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28543           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   28544           0 :                 info->far_ptr = & ((M_SBSegment *) node)->name;
   28545           0 :                 return GF_OK;
   28546             :         default:
   28547           0 :                 return GF_BAD_PARAM;
   28548             :         }
   28549           0 : }
   28550             : 
   28551             : 
   28552             : static s32 SBSegment_get_field_index_by_name(char *name)
   28553             : {
   28554           0 :         if (!strcmp("addChildren", name)) return 0;
   28555           0 :         if (!strcmp("removeChildren", name)) return 1;
   28556           0 :         if (!strcmp("centerOfMass", name)) return 2;
   28557           0 :         if (!strcmp("children", name)) return 3;
   28558           0 :         if (!strcmp("mass", name)) return 4;
   28559           0 :         if (!strcmp("momentsOfInertia", name)) return 5;
   28560           0 :         if (!strcmp("name", name)) return 6;
   28561           0 :         return -1;
   28562           0 : }
   28563             : static Bool SBSegment_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28564             : {
   28565           0 :         switch (FieldIndex) {
   28566             :         case 2:
   28567           0 :                 *AType = 1;
   28568           0 :                 *QType = 1;
   28569           0 :                 return 1;
   28570             :         default:
   28571           0 :                 return 0;
   28572             :         }
   28573           0 : }
   28574             : 
   28575             : 
   28576             : 
   28577             : GF_Node *SBSegment_Create()
   28578             : {
   28579             :         M_SBSegment *p;
   28580           0 :         GF_SAFEALLOC(p, M_SBSegment);
   28581           0 :         if(!p) return NULL;
   28582           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBSegment);
   28583           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   28584             : 
   28585             :         /*default field values*/
   28586           0 :         p->centerOfMass.x = FLT2FIX(0);
   28587           0 :         p->centerOfMass.y = FLT2FIX(0);
   28588           0 :         p->centerOfMass.z = FLT2FIX(0);
   28589           0 :         p->mass = FLT2FIX(0);
   28590           0 :         p->momentsOfInertia.vals = (SFVec3f *)gf_malloc(sizeof(SFVec3f)*3);
   28591           0 :         p->momentsOfInertia.count = 3;
   28592           0 :         p->momentsOfInertia.vals[0].x = FLT2FIX(0);
   28593           0 :         p->momentsOfInertia.vals[0].y = FLT2FIX(0);
   28594           0 :         p->momentsOfInertia.vals[0].z = FLT2FIX(0);
   28595           0 :         p->momentsOfInertia.vals[1].x = FLT2FIX(0);
   28596           0 :         p->momentsOfInertia.vals[1].y = FLT2FIX(0);
   28597           0 :         p->momentsOfInertia.vals[1].z = FLT2FIX(0);
   28598           0 :         p->momentsOfInertia.vals[2].x = FLT2FIX(0);
   28599           0 :         p->momentsOfInertia.vals[2].y = FLT2FIX(0);
   28600           0 :         p->momentsOfInertia.vals[2].z = FLT2FIX(0);
   28601           0 :         return (GF_Node *)p;
   28602           0 : }
   28603             : 
   28604             : 
   28605             : /*
   28606             :         SBSite Node deletion
   28607             : */
   28608             : 
   28609             : static void SBSite_Del(GF_Node *node)
   28610             : {
   28611           0 :         M_SBSite *p = (M_SBSite *) node;
   28612           0 :         gf_sg_sfstring_del(p->name);
   28613           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   28614           0 :         gf_node_free((GF_Node *) p);
   28615           0 : }
   28616             : 
   28617             : static const u16 SBSite_Def2All[] = { 2, 3, 4, 5, 6, 7, 8};
   28618             : static const u16 SBSite_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   28619             : static const u16 SBSite_Out2All[] = { 2, 3, 4, 5, 6, 7, 8};
   28620             : static const u16 SBSite_Dyn2All[] = { 2, 5, 6, 7, 8};
   28621             : 
   28622             : static u32 SBSite_get_field_count(GF_Node *node, u8 IndexMode)
   28623             : {
   28624           0 :         switch(IndexMode) {
   28625             :         case GF_SG_FIELD_CODING_IN:
   28626           0 :                 return 9;
   28627             :         case GF_SG_FIELD_CODING_DEF:
   28628           0 :                 return 7;
   28629             :         case GF_SG_FIELD_CODING_OUT:
   28630           0 :                 return 7;
   28631             :         case GF_SG_FIELD_CODING_DYN:
   28632           0 :                 return 5;
   28633             :         default:
   28634           0 :                 return 9;
   28635             :         }
   28636           0 : }
   28637             : 
   28638             : static GF_Err SBSite_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   28639             : {
   28640           0 :         switch(IndexMode) {
   28641             :         case GF_SG_FIELD_CODING_IN:
   28642           0 :                 *allField = SBSite_In2All[inField];
   28643           0 :                 return GF_OK;
   28644             :         case GF_SG_FIELD_CODING_DEF:
   28645           0 :                 *allField = SBSite_Def2All[inField];
   28646           0 :                 return GF_OK;
   28647             :         case GF_SG_FIELD_CODING_OUT:
   28648           0 :                 *allField = SBSite_Out2All[inField];
   28649           0 :                 return GF_OK;
   28650             :         case GF_SG_FIELD_CODING_DYN:
   28651           0 :                 *allField = SBSite_Dyn2All[inField];
   28652           0 :                 return GF_OK;
   28653             :         default:
   28654           0 :                 return GF_BAD_PARAM;
   28655             :         }
   28656           0 : }
   28657             : static GF_Err SBSite_get_field(GF_Node *node, GF_FieldInfo *info)
   28658             : {
   28659           0 :         switch (info->fieldIndex) {
   28660             :         case 0:
   28661           0 :                 info->name = "addChildren";
   28662           0 :                 info->eventType = GF_SG_EVENT_IN;
   28663           0 :                 info->on_event_in = ((M_SBSite *)node)->on_addChildren;
   28664           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28665           0 :                 info->NDTtype = NDT_SF3DNode;
   28666           0 :                 info->far_ptr = & ((M_SBSite *)node)->addChildren;
   28667           0 :                 return GF_OK;
   28668             :         case 1:
   28669           0 :                 info->name = "removeChildren";
   28670           0 :                 info->eventType = GF_SG_EVENT_IN;
   28671           0 :                 info->on_event_in = ((M_SBSite *)node)->on_removeChildren;
   28672           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28673           0 :                 info->NDTtype = NDT_SF3DNode;
   28674           0 :                 info->far_ptr = & ((M_SBSite *)node)->removeChildren;
   28675           0 :                 return GF_OK;
   28676             :         case 2:
   28677           0 :                 info->name = "center";
   28678           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28679           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28680           0 :                 info->far_ptr = & ((M_SBSite *) node)->center;
   28681           0 :                 return GF_OK;
   28682             :         case 3:
   28683           0 :                 info->name = "children";
   28684           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28685           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28686           0 :                 info->NDTtype = NDT_SF3DNode;
   28687           0 :                 info->far_ptr = & ((M_SBSite *)node)->children;
   28688           0 :                 return GF_OK;
   28689             :         case 4:
   28690           0 :                 info->name = "name";
   28691           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28692           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   28693           0 :                 info->far_ptr = & ((M_SBSite *) node)->name;
   28694           0 :                 return GF_OK;
   28695             :         case 5:
   28696           0 :                 info->name = "rotation";
   28697           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28698           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28699           0 :                 info->far_ptr = & ((M_SBSite *) node)->rotation;
   28700           0 :                 return GF_OK;
   28701             :         case 6:
   28702           0 :                 info->name = "scale";
   28703           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28704           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28705           0 :                 info->far_ptr = & ((M_SBSite *) node)->scale;
   28706           0 :                 return GF_OK;
   28707             :         case 7:
   28708           0 :                 info->name = "scaleOrientation";
   28709           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28710           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28711           0 :                 info->far_ptr = & ((M_SBSite *) node)->scaleOrientation;
   28712           0 :                 return GF_OK;
   28713             :         case 8:
   28714           0 :                 info->name = "translation";
   28715           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28716           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28717           0 :                 info->far_ptr = & ((M_SBSite *) node)->translation;
   28718           0 :                 return GF_OK;
   28719             :         default:
   28720           0 :                 return GF_BAD_PARAM;
   28721             :         }
   28722           0 : }
   28723             : 
   28724             : 
   28725             : static s32 SBSite_get_field_index_by_name(char *name)
   28726             : {
   28727           0 :         if (!strcmp("addChildren", name)) return 0;
   28728           0 :         if (!strcmp("removeChildren", name)) return 1;
   28729           0 :         if (!strcmp("center", name)) return 2;
   28730           0 :         if (!strcmp("children", name)) return 3;
   28731           0 :         if (!strcmp("name", name)) return 4;
   28732           0 :         if (!strcmp("rotation", name)) return 5;
   28733           0 :         if (!strcmp("scale", name)) return 6;
   28734           0 :         if (!strcmp("scaleOrientation", name)) return 7;
   28735           0 :         if (!strcmp("translation", name)) return 8;
   28736           0 :         return -1;
   28737           0 : }
   28738             : static Bool SBSite_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28739             : {
   28740           0 :         switch (FieldIndex) {
   28741             :         case 2:
   28742           0 :                 *AType = 1;
   28743           0 :                 *QType = 1;
   28744           0 :                 return 1;
   28745             :         case 5:
   28746           0 :                 *AType = 10;
   28747           0 :                 *QType = 10;
   28748           0 :                 return 1;
   28749             :         case 6:
   28750           0 :                 *AType = 11;
   28751           0 :                 *QType = 7;
   28752           0 :                 return 1;
   28753             :         case 7:
   28754           0 :                 *AType = 10;
   28755           0 :                 *QType = 10;
   28756           0 :                 return 1;
   28757             :         case 8:
   28758           0 :                 *AType = 1;
   28759           0 :                 *QType = 1;
   28760           0 :                 return 1;
   28761             :         default:
   28762           0 :                 return 0;
   28763             :         }
   28764           0 : }
   28765             : 
   28766             : 
   28767             : 
   28768             : GF_Node *SBSite_Create()
   28769             : {
   28770             :         M_SBSite *p;
   28771           0 :         GF_SAFEALLOC(p, M_SBSite);
   28772           0 :         if(!p) return NULL;
   28773           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBSite);
   28774           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   28775             : 
   28776             :         /*default field values*/
   28777           0 :         p->center.x = FLT2FIX(0);
   28778           0 :         p->center.y = FLT2FIX(0);
   28779           0 :         p->center.z = FLT2FIX(0);
   28780           0 :         p->rotation.x = FLT2FIX(0);
   28781           0 :         p->rotation.y = FLT2FIX(0);
   28782           0 :         p->rotation.z = FLT2FIX(1);
   28783           0 :         p->rotation.q = FLT2FIX(0);
   28784           0 :         p->scale.x = FLT2FIX(1);
   28785           0 :         p->scale.y = FLT2FIX(1);
   28786           0 :         p->scale.z = FLT2FIX(1);
   28787           0 :         p->scaleOrientation.x = FLT2FIX(0);
   28788           0 :         p->scaleOrientation.y = FLT2FIX(0);
   28789           0 :         p->scaleOrientation.z = FLT2FIX(1);
   28790           0 :         p->scaleOrientation.q = FLT2FIX(0);
   28791           0 :         p->translation.x = FLT2FIX(0);
   28792           0 :         p->translation.y = FLT2FIX(0);
   28793           0 :         p->translation.z = FLT2FIX(0);
   28794           0 :         return (GF_Node *)p;
   28795           0 : }
   28796             : 
   28797             : 
   28798             : /*
   28799             :         SBSkinnedModel Node deletion
   28800             : */
   28801             : 
   28802             : static void SBSkinnedModel_Del(GF_Node *node)
   28803             : {
   28804           0 :         M_SBSkinnedModel *p = (M_SBSkinnedModel *) node;
   28805           0 :         gf_node_unregister_children((GF_Node *) p, p->bones);
   28806           0 :         gf_node_unregister_children((GF_Node *) p, p->muscles);
   28807           0 :         gf_sg_sfstring_del(p->name);
   28808           0 :         gf_node_unregister_children((GF_Node *) p, p->segments);
   28809           0 :         gf_node_unregister_children((GF_Node *) p, p->sites);
   28810           0 :         gf_node_unregister_children((GF_Node *) p, p->skeleton);
   28811           0 :         gf_node_unregister_children((GF_Node *) p, p->skin);
   28812           0 :         gf_node_unregister((GF_Node *) p->skinCoord, (GF_Node *) p);
   28813           0 :         gf_node_unregister((GF_Node *) p->skinNormal, (GF_Node *) p);
   28814           0 :         gf_node_unregister((GF_Node *) p->weighsComputationSkinCoord, (GF_Node *) p);
   28815           0 :         gf_node_free((GF_Node *) p);
   28816           0 : }
   28817             : 
   28818             : static const u16 SBSkinnedModel_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   28819             : static const u16 SBSkinnedModel_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   28820             : static const u16 SBSkinnedModel_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   28821             : static const u16 SBSkinnedModel_Dyn2All[] = { 1, 4, 6, 7, 13};
   28822             : 
   28823             : static u32 SBSkinnedModel_get_field_count(GF_Node *node, u8 IndexMode)
   28824             : {
   28825           0 :         switch(IndexMode) {
   28826             :         case GF_SG_FIELD_CODING_IN:
   28827           0 :                 return 15;
   28828             :         case GF_SG_FIELD_CODING_DEF:
   28829           0 :                 return 15;
   28830             :         case GF_SG_FIELD_CODING_OUT:
   28831           0 :                 return 15;
   28832             :         case GF_SG_FIELD_CODING_DYN:
   28833           0 :                 return 5;
   28834             :         default:
   28835           0 :                 return 15;
   28836             :         }
   28837           0 : }
   28838             : 
   28839             : static GF_Err SBSkinnedModel_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   28840             : {
   28841           0 :         switch(IndexMode) {
   28842             :         case GF_SG_FIELD_CODING_IN:
   28843           0 :                 *allField = SBSkinnedModel_In2All[inField];
   28844           0 :                 return GF_OK;
   28845             :         case GF_SG_FIELD_CODING_DEF:
   28846           0 :                 *allField = SBSkinnedModel_Def2All[inField];
   28847           0 :                 return GF_OK;
   28848             :         case GF_SG_FIELD_CODING_OUT:
   28849           0 :                 *allField = SBSkinnedModel_Out2All[inField];
   28850           0 :                 return GF_OK;
   28851             :         case GF_SG_FIELD_CODING_DYN:
   28852           0 :                 *allField = SBSkinnedModel_Dyn2All[inField];
   28853           0 :                 return GF_OK;
   28854             :         default:
   28855           0 :                 return GF_BAD_PARAM;
   28856             :         }
   28857           0 : }
   28858             : static GF_Err SBSkinnedModel_get_field(GF_Node *node, GF_FieldInfo *info)
   28859             : {
   28860           0 :         switch (info->fieldIndex) {
   28861             :         case 0:
   28862           0 :                 info->name = "bones";
   28863           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28864           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28865           0 :                 info->NDTtype = NDT_SFSBBoneNode;
   28866           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->bones;
   28867           0 :                 return GF_OK;
   28868             :         case 1:
   28869           0 :                 info->name = "center";
   28870           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28871           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28872           0 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->center;
   28873           0 :                 return GF_OK;
   28874             :         case 2:
   28875           0 :                 info->name = "muscles";
   28876           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28877           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28878           0 :                 info->NDTtype = NDT_SFSBMuscleNode;
   28879           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->muscles;
   28880           0 :                 return GF_OK;
   28881             :         case 3:
   28882           0 :                 info->name = "name";
   28883           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28884           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   28885           0 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->name;
   28886           0 :                 return GF_OK;
   28887             :         case 4:
   28888           0 :                 info->name = "rotation";
   28889           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28890           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28891           0 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->rotation;
   28892           0 :                 return GF_OK;
   28893             :         case 5:
   28894           0 :                 info->name = "segments";
   28895           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28896           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28897           0 :                 info->NDTtype = NDT_SFSBSegmentNode;
   28898           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->segments;
   28899           0 :                 return GF_OK;
   28900             :         case 6:
   28901           0 :                 info->name = "scale";
   28902           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28903           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28904           0 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->scale;
   28905           0 :                 return GF_OK;
   28906             :         case 7:
   28907           0 :                 info->name = "scaleOrientation";
   28908           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28909           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28910           0 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->scaleOrientation;
   28911           0 :                 return GF_OK;
   28912             :         case 8:
   28913           0 :                 info->name = "sites";
   28914           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28915           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28916           0 :                 info->NDTtype = NDT_SFSBSiteNode;
   28917           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->sites;
   28918           0 :                 return GF_OK;
   28919             :         case 9:
   28920           0 :                 info->name = "skeleton";
   28921           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28922           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28923           0 :                 info->NDTtype = NDT_SF3DNode;
   28924           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->skeleton;
   28925           0 :                 return GF_OK;
   28926             :         case 10:
   28927           0 :                 info->name = "skin";
   28928           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28929           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28930           0 :                 info->NDTtype = NDT_SF3DNode;
   28931           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->skin;
   28932           0 :                 return GF_OK;
   28933             :         case 11:
   28934           0 :                 info->name = "skinCoord";
   28935           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28936           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28937           0 :                 info->NDTtype = NDT_SFCoordinateNode;
   28938           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->skinCoord;
   28939           0 :                 return GF_OK;
   28940             :         case 12:
   28941           0 :                 info->name = "skinNormal";
   28942           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28943           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28944           0 :                 info->NDTtype = NDT_SFNormalNode;
   28945           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->skinNormal;
   28946           0 :                 return GF_OK;
   28947             :         case 13:
   28948           0 :                 info->name = "translation";
   28949           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28950           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28951           0 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->translation;
   28952           0 :                 return GF_OK;
   28953             :         case 14:
   28954           0 :                 info->name = "weighsComputationSkinCoord";
   28955           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28956           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28957           0 :                 info->NDTtype = NDT_SF3DNode;
   28958           0 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->weighsComputationSkinCoord;
   28959           0 :                 return GF_OK;
   28960             :         default:
   28961           0 :                 return GF_BAD_PARAM;
   28962             :         }
   28963           0 : }
   28964             : 
   28965             : 
   28966             : static s32 SBSkinnedModel_get_field_index_by_name(char *name)
   28967             : {
   28968           0 :         if (!strcmp("bones", name)) return 0;
   28969           0 :         if (!strcmp("center", name)) return 1;
   28970           0 :         if (!strcmp("muscles", name)) return 2;
   28971           0 :         if (!strcmp("name", name)) return 3;
   28972           0 :         if (!strcmp("rotation", name)) return 4;
   28973           0 :         if (!strcmp("segments", name)) return 5;
   28974           0 :         if (!strcmp("scale", name)) return 6;
   28975           0 :         if (!strcmp("scaleOrientation", name)) return 7;
   28976           0 :         if (!strcmp("sites", name)) return 8;
   28977           0 :         if (!strcmp("skeleton", name)) return 9;
   28978           0 :         if (!strcmp("skin", name)) return 10;
   28979           0 :         if (!strcmp("skinCoord", name)) return 11;
   28980           0 :         if (!strcmp("skinNormal", name)) return 12;
   28981           0 :         if (!strcmp("translation", name)) return 13;
   28982           0 :         if (!strcmp("weighsComputationSkinCoord", name)) return 14;
   28983           0 :         return -1;
   28984           0 : }
   28985             : static Bool SBSkinnedModel_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28986             : {
   28987           0 :         switch (FieldIndex) {
   28988             :         case 1:
   28989           0 :                 *AType = 1;
   28990           0 :                 *QType = 1;
   28991           0 :                 return 1;
   28992             :         case 4:
   28993           0 :                 *AType = 10;
   28994           0 :                 *QType = 10;
   28995           0 :                 return 1;
   28996             :         case 6:
   28997           0 :                 *AType = 11;
   28998           0 :                 *QType = 7;
   28999           0 :                 return 1;
   29000             :         case 7:
   29001           0 :                 *AType = 10;
   29002           0 :                 *QType = 10;
   29003           0 :                 return 1;
   29004             :         case 13:
   29005           0 :                 *AType = 1;
   29006           0 :                 *QType = 1;
   29007           0 :                 return 1;
   29008             :         default:
   29009           0 :                 return 0;
   29010             :         }
   29011           0 : }
   29012             : 
   29013             : 
   29014             : 
   29015             : GF_Node *SBSkinnedModel_Create()
   29016             : {
   29017             :         M_SBSkinnedModel *p;
   29018           0 :         GF_SAFEALLOC(p, M_SBSkinnedModel);
   29019           0 :         if(!p) return NULL;
   29020           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBSkinnedModel);
   29021             : 
   29022             :         /*default field values*/
   29023           0 :         p->center.x = FLT2FIX(0);
   29024           0 :         p->center.y = FLT2FIX(0);
   29025           0 :         p->center.z = FLT2FIX(0);
   29026           0 :         p->rotation.x = FLT2FIX(0);
   29027           0 :         p->rotation.y = FLT2FIX(0);
   29028           0 :         p->rotation.z = FLT2FIX(1);
   29029           0 :         p->rotation.q = FLT2FIX(0);
   29030           0 :         p->scale.x = FLT2FIX(1);
   29031           0 :         p->scale.y = FLT2FIX(1);
   29032           0 :         p->scale.z = FLT2FIX(1);
   29033           0 :         p->scaleOrientation.x = FLT2FIX(0);
   29034           0 :         p->scaleOrientation.y = FLT2FIX(0);
   29035           0 :         p->scaleOrientation.z = FLT2FIX(1);
   29036           0 :         p->scaleOrientation.q = FLT2FIX(0);
   29037           0 :         p->translation.x = FLT2FIX(0);
   29038           0 :         p->translation.y = FLT2FIX(0);
   29039           0 :         p->translation.z = FLT2FIX(0);
   29040           0 :         return (GF_Node *)p;
   29041           0 : }
   29042             : 
   29043             : 
   29044             : /*
   29045             :         SBVCAnimation Node deletion
   29046             : */
   29047             : 
   29048             : static void SBVCAnimation_Del(GF_Node *node)
   29049             : {
   29050           0 :         M_SBVCAnimation *p = (M_SBVCAnimation *) node;
   29051           0 :         gf_sg_mfurl_del(p->url);
   29052           0 :         gf_node_unregister_children((GF_Node *) p, p->virtualCharacters);
   29053           0 :         gf_node_free((GF_Node *) p);
   29054           0 : }
   29055             : 
   29056             : static const u16 SBVCAnimation_Def2All[] = { 0, 1};
   29057             : static const u16 SBVCAnimation_In2All[] = { 0, 1};
   29058             : static const u16 SBVCAnimation_Out2All[] = { 0, 1};
   29059             : 
   29060             : static u32 SBVCAnimation_get_field_count(GF_Node *node, u8 IndexMode)
   29061             : {
   29062           0 :         switch(IndexMode) {
   29063             :         case GF_SG_FIELD_CODING_IN:
   29064           0 :                 return 2;
   29065             :         case GF_SG_FIELD_CODING_DEF:
   29066           0 :                 return 2;
   29067             :         case GF_SG_FIELD_CODING_OUT:
   29068           0 :                 return 2;
   29069             :         case GF_SG_FIELD_CODING_DYN:
   29070           0 :                 return 0;
   29071             :         default:
   29072           0 :                 return 2;
   29073             :         }
   29074           0 : }
   29075             : 
   29076             : static GF_Err SBVCAnimation_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29077             : {
   29078           0 :         switch(IndexMode) {
   29079             :         case GF_SG_FIELD_CODING_IN:
   29080           0 :                 *allField = SBVCAnimation_In2All[inField];
   29081           0 :                 return GF_OK;
   29082             :         case GF_SG_FIELD_CODING_DEF:
   29083           0 :                 *allField = SBVCAnimation_Def2All[inField];
   29084           0 :                 return GF_OK;
   29085             :         case GF_SG_FIELD_CODING_OUT:
   29086           0 :                 *allField = SBVCAnimation_Out2All[inField];
   29087           0 :                 return GF_OK;
   29088             :         default:
   29089           0 :                 return GF_BAD_PARAM;
   29090             :         }
   29091           0 : }
   29092             : static GF_Err SBVCAnimation_get_field(GF_Node *node, GF_FieldInfo *info)
   29093             : {
   29094           0 :         switch (info->fieldIndex) {
   29095             :         case 0:
   29096           0 :                 info->name = "url";
   29097           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29098           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   29099           0 :                 info->far_ptr = & ((M_SBVCAnimation *) node)->url;
   29100           0 :                 return GF_OK;
   29101             :         case 1:
   29102           0 :                 info->name = "virtualCharacters";
   29103           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29104           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   29105           0 :                 info->NDTtype = NDT_SF3DNode;
   29106           0 :                 info->far_ptr = & ((M_SBVCAnimation *)node)->virtualCharacters;
   29107           0 :                 return GF_OK;
   29108             :         default:
   29109           0 :                 return GF_BAD_PARAM;
   29110             :         }
   29111           0 : }
   29112             : 
   29113             : 
   29114             : static s32 SBVCAnimation_get_field_index_by_name(char *name)
   29115             : {
   29116           0 :         if (!strcmp("url", name)) return 0;
   29117           0 :         if (!strcmp("virtualCharacters", name)) return 1;
   29118           0 :         return -1;
   29119           0 : }
   29120             : static Bool SBVCAnimation_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29121             : {
   29122             :         switch (FieldIndex) {
   29123             :         default:
   29124           0 :                 return 0;
   29125             :         }
   29126             : }
   29127             : 
   29128             : 
   29129             : 
   29130             : GF_Node *SBVCAnimation_Create()
   29131             : {
   29132             :         M_SBVCAnimation *p;
   29133           0 :         GF_SAFEALLOC(p, M_SBVCAnimation);
   29134           0 :         if(!p) return NULL;
   29135           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBVCAnimation);
   29136             : 
   29137             :         /*default field values*/
   29138           0 :         return (GF_Node *)p;
   29139           0 : }
   29140             : 
   29141             : 
   29142             : /*
   29143             :         ScalarAnimator Node deletion
   29144             : */
   29145             : 
   29146             : static void ScalarAnimator_Del(GF_Node *node)
   29147             : {
   29148          36 :         M_ScalarAnimator *p = (M_ScalarAnimator *) node;
   29149          18 :         gf_sg_mffloat_del(p->key);
   29150          18 :         gf_sg_mfvec2f_del(p->keySpline);
   29151          18 :         gf_sg_mffloat_del(p->keyValue);
   29152          18 :         gf_sg_mffloat_del(p->weight);
   29153          18 :         gf_node_free((GF_Node *) p);
   29154          18 : }
   29155             : 
   29156             : static const u16 ScalarAnimator_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8};
   29157             : static const u16 ScalarAnimator_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   29158             : static const u16 ScalarAnimator_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   29159             : 
   29160             : static u32 ScalarAnimator_get_field_count(GF_Node *node, u8 IndexMode)
   29161             : {
   29162          68 :         switch(IndexMode) {
   29163             :         case GF_SG_FIELD_CODING_IN:
   29164           9 :                 return 9;
   29165             :         case GF_SG_FIELD_CODING_DEF:
   29166           9 :                 return 8;
   29167             :         case GF_SG_FIELD_CODING_OUT:
   29168           9 :                 return 10;
   29169             :         case GF_SG_FIELD_CODING_DYN:
   29170           0 :                 return 0;
   29171             :         default:
   29172           7 :                 return 11;
   29173             :         }
   29174          34 : }
   29175             : 
   29176             : static GF_Err ScalarAnimator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29177             : {
   29178         136 :         switch(IndexMode) {
   29179             :         case GF_SG_FIELD_CODING_IN:
   29180           7 :                 *allField = ScalarAnimator_In2All[inField];
   29181           7 :                 return GF_OK;
   29182             :         case GF_SG_FIELD_CODING_DEF:
   29183          36 :                 *allField = ScalarAnimator_Def2All[inField];
   29184          36 :                 return GF_OK;
   29185             :         case GF_SG_FIELD_CODING_OUT:
   29186          25 :                 *allField = ScalarAnimator_Out2All[inField];
   29187          25 :                 return GF_OK;
   29188             :         default:
   29189           0 :                 return GF_BAD_PARAM;
   29190             :         }
   29191          68 : }
   29192             : static GF_Err ScalarAnimator_get_field(GF_Node *node, GF_FieldInfo *info)
   29193             : {
   29194         482 :         switch (info->fieldIndex) {
   29195             :         case 0:
   29196          15 :                 info->name = "set_fraction";
   29197          15 :                 info->eventType = GF_SG_EVENT_IN;
   29198          15 :                 info->on_event_in = ((M_ScalarAnimator *)node)->on_set_fraction;
   29199          15 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29200          15 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->set_fraction;
   29201          15 :                 return GF_OK;
   29202             :         case 1:
   29203          18 :                 info->name = "fromTo";
   29204          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29205          18 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   29206          18 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->fromTo;
   29207          18 :                 return GF_OK;
   29208             :         case 2:
   29209          18 :                 info->name = "key";
   29210          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29211          18 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   29212          18 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->key;
   29213          18 :                 return GF_OK;
   29214             :         case 3:
   29215          33 :                 info->name = "keyType";
   29216          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29217          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29218          33 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->keyType;
   29219          33 :                 return GF_OK;
   29220             :         case 4:
   29221          33 :                 info->name = "keySpline";
   29222          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29223          33 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   29224          33 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->keySpline;
   29225          33 :                 return GF_OK;
   29226             :         case 5:
   29227          33 :                 info->name = "keyValue";
   29228          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29229          33 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   29230          33 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->keyValue;
   29231          33 :                 return GF_OK;
   29232             :         case 6:
   29233          33 :                 info->name = "keyValueType";
   29234          33 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29235          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29236          33 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->keyValueType;
   29237          33 :                 return GF_OK;
   29238             :         case 7:
   29239          18 :                 info->name = "offset";
   29240          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29241          18 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29242          18 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->offset;
   29243          18 :                 return GF_OK;
   29244             :         case 8:
   29245          18 :                 info->name = "weight";
   29246          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29247          18 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   29248          18 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->weight;
   29249          18 :                 return GF_OK;
   29250             :         case 9:
   29251           7 :                 info->name = "endValue";
   29252           7 :                 info->eventType = GF_SG_EVENT_OUT;
   29253           7 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29254           7 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->endValue;
   29255           7 :                 return GF_OK;
   29256             :         case 10:
   29257          15 :                 info->name = "value_changed";
   29258          15 :                 info->eventType = GF_SG_EVENT_OUT;
   29259          15 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29260          15 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->value_changed;
   29261          15 :                 return GF_OK;
   29262             :         default:
   29263           0 :                 return GF_BAD_PARAM;
   29264             :         }
   29265         241 : }
   29266             : 
   29267             : 
   29268             : static s32 ScalarAnimator_get_field_index_by_name(char *name)
   29269             : {
   29270          52 :         if (!strcmp("set_fraction", name)) return 0;
   29271          20 :         if (!strcmp("fromTo", name)) return 1;
   29272          20 :         if (!strcmp("key", name)) return 2;
   29273          24 :         if (!strcmp("keyType", name)) return 3;
   29274          20 :         if (!strcmp("keySpline", name)) return 4;
   29275          16 :         if (!strcmp("keyValue", name)) return 5;
   29276          12 :         if (!strcmp("keyValueType", name)) return 6;
   29277           4 :         if (!strcmp("offset", name)) return 7;
   29278           4 :         if (!strcmp("weight", name)) return 8;
   29279           4 :         if (!strcmp("endValue", name)) return 9;
   29280           8 :         if (!strcmp("value_changed", name)) return 10;
   29281           0 :         return -1;
   29282          24 : }
   29283             : static Bool ScalarAnimator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29284             : {
   29285           0 :         switch (FieldIndex) {
   29286             :         case 1:
   29287           0 :                 *AType = 0;
   29288           0 :                 *QType = 8;
   29289           0 :                 return 1;
   29290             :         case 2:
   29291           0 :                 *AType = 0;
   29292           0 :                 *QType = 8;
   29293           0 :                 return 1;
   29294             :         case 4:
   29295           0 :                 *AType = 0;
   29296           0 :                 *QType = 8;
   29297           0 :                 return 1;
   29298             :         case 5:
   29299           0 :                 *AType = 0;
   29300           0 :                 *QType = 0;
   29301           0 :                 return 1;
   29302             :         default:
   29303           0 :                 return 0;
   29304             :         }
   29305           0 : }
   29306             : 
   29307             : 
   29308             : 
   29309             : GF_Node *ScalarAnimator_Create()
   29310             : {
   29311             :         M_ScalarAnimator *p;
   29312          54 :         GF_SAFEALLOC(p, M_ScalarAnimator);
   29313          18 :         if(!p) return NULL;
   29314          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ScalarAnimator);
   29315             : 
   29316             :         /*default field values*/
   29317          18 :         p->fromTo.x = FLT2FIX(0);
   29318          18 :         p->fromTo.y = FLT2FIX(1);
   29319          18 :         p->keyType = 0;
   29320          18 :         p->keySpline.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   29321          18 :         p->keySpline.count = 2;
   29322          18 :         p->keySpline.vals[0].x = FLT2FIX(0);
   29323          18 :         p->keySpline.vals[0].y = FLT2FIX(0);
   29324          18 :         p->keySpline.vals[1].x = FLT2FIX(1);
   29325          18 :         p->keySpline.vals[1].y = FLT2FIX(1);
   29326          18 :         p->keyValueType = 0;
   29327          18 :         p->offset = FLT2FIX(0);
   29328          18 :         return (GF_Node *)p;
   29329          18 : }
   29330             : 
   29331             : 
   29332             : /*
   29333             :         SimpleTexture Node deletion
   29334             : */
   29335             : 
   29336             : static void SimpleTexture_Del(GF_Node *node)
   29337             : {
   29338           0 :         M_SimpleTexture *p = (M_SimpleTexture *) node;
   29339           0 :         gf_node_unregister((GF_Node *) p->depth, (GF_Node *) p);
   29340           0 :         gf_node_unregister((GF_Node *) p->texture, (GF_Node *) p);
   29341           0 :         gf_node_free((GF_Node *) p);
   29342           0 : }
   29343             : 
   29344             : static const u16 SimpleTexture_Def2All[] = { 0, 1};
   29345             : 
   29346             : static u32 SimpleTexture_get_field_count(GF_Node *node, u8 IndexMode)
   29347             : {
   29348           0 :         switch(IndexMode) {
   29349             :         case GF_SG_FIELD_CODING_IN:
   29350           0 :                 return 0;
   29351             :         case GF_SG_FIELD_CODING_DEF:
   29352           0 :                 return 2;
   29353             :         case GF_SG_FIELD_CODING_OUT:
   29354           0 :                 return 0;
   29355             :         case GF_SG_FIELD_CODING_DYN:
   29356           0 :                 return 0;
   29357             :         default:
   29358           0 :                 return 2;
   29359             :         }
   29360           0 : }
   29361             : 
   29362             : static GF_Err SimpleTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29363             : {
   29364           0 :         switch(IndexMode) {
   29365             :         case GF_SG_FIELD_CODING_DEF:
   29366           0 :                 *allField = SimpleTexture_Def2All[inField];
   29367           0 :                 return GF_OK;
   29368             :         default:
   29369           0 :                 return GF_BAD_PARAM;
   29370             :         }
   29371           0 : }
   29372             : static GF_Err SimpleTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   29373             : {
   29374           0 :         switch (info->fieldIndex) {
   29375             :         case 0:
   29376           0 :                 info->name = "depth";
   29377           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29378           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29379           0 :                 info->NDTtype = NDT_SFTextureNode;
   29380           0 :                 info->far_ptr = & ((M_SimpleTexture *)node)->depth;
   29381           0 :                 return GF_OK;
   29382             :         case 1:
   29383           0 :                 info->name = "texture";
   29384           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29385           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29386           0 :                 info->NDTtype = NDT_SFTextureNode;
   29387           0 :                 info->far_ptr = & ((M_SimpleTexture *)node)->texture;
   29388           0 :                 return GF_OK;
   29389             :         default:
   29390           0 :                 return GF_BAD_PARAM;
   29391             :         }
   29392           0 : }
   29393             : 
   29394             : 
   29395             : static s32 SimpleTexture_get_field_index_by_name(char *name)
   29396             : {
   29397           0 :         if (!strcmp("depth", name)) return 0;
   29398           0 :         if (!strcmp("texture", name)) return 1;
   29399           0 :         return -1;
   29400           0 : }
   29401             : static Bool SimpleTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29402             : {
   29403             :         switch (FieldIndex) {
   29404             :         default:
   29405           0 :                 return 0;
   29406             :         }
   29407             : }
   29408             : 
   29409             : 
   29410             : 
   29411             : GF_Node *SimpleTexture_Create()
   29412             : {
   29413             :         M_SimpleTexture *p;
   29414           0 :         GF_SAFEALLOC(p, M_SimpleTexture);
   29415           0 :         if(!p) return NULL;
   29416           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SimpleTexture);
   29417             : 
   29418             :         /*default field values*/
   29419           0 :         return (GF_Node *)p;
   29420           0 : }
   29421             : 
   29422             : 
   29423             : /*
   29424             :         SolidRep Node deletion
   29425             : */
   29426             : 
   29427             : static void SolidRep_Del(GF_Node *node)
   29428             : {
   29429           0 :         M_SolidRep *p = (M_SolidRep *) node;
   29430           0 :         gf_sg_mfint32_del(p->densityList);
   29431           0 :         gf_node_unregister((GF_Node *) p->solidTree, (GF_Node *) p);
   29432           0 :         gf_node_free((GF_Node *) p);
   29433           0 : }
   29434             : 
   29435             : static const u16 SolidRep_Def2All[] = { 0, 1, 2};
   29436             : static const u16 SolidRep_In2All[] = { 0, 1, 2};
   29437             : static const u16 SolidRep_Out2All[] = { 0, 1, 2};
   29438             : static const u16 SolidRep_Dyn2All[] = { 0};
   29439             : 
   29440             : static u32 SolidRep_get_field_count(GF_Node *node, u8 IndexMode)
   29441             : {
   29442           0 :         switch(IndexMode) {
   29443             :         case GF_SG_FIELD_CODING_IN:
   29444           0 :                 return 3;
   29445             :         case GF_SG_FIELD_CODING_DEF:
   29446           0 :                 return 3;
   29447             :         case GF_SG_FIELD_CODING_OUT:
   29448           0 :                 return 3;
   29449             :         case GF_SG_FIELD_CODING_DYN:
   29450           0 :                 return 1;
   29451             :         default:
   29452           0 :                 return 3;
   29453             :         }
   29454           0 : }
   29455             : 
   29456             : static GF_Err SolidRep_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29457             : {
   29458           0 :         switch(IndexMode) {
   29459             :         case GF_SG_FIELD_CODING_IN:
   29460           0 :                 *allField = SolidRep_In2All[inField];
   29461           0 :                 return GF_OK;
   29462             :         case GF_SG_FIELD_CODING_DEF:
   29463           0 :                 *allField = SolidRep_Def2All[inField];
   29464           0 :                 return GF_OK;
   29465             :         case GF_SG_FIELD_CODING_OUT:
   29466           0 :                 *allField = SolidRep_Out2All[inField];
   29467           0 :                 return GF_OK;
   29468             :         case GF_SG_FIELD_CODING_DYN:
   29469           0 :                 *allField = SolidRep_Dyn2All[inField];
   29470           0 :                 return GF_OK;
   29471             :         default:
   29472           0 :                 return GF_BAD_PARAM;
   29473             :         }
   29474           0 : }
   29475             : static GF_Err SolidRep_get_field(GF_Node *node, GF_FieldInfo *info)
   29476             : {
   29477           0 :         switch (info->fieldIndex) {
   29478             :         case 0:
   29479           0 :                 info->name = "bboxSize";
   29480           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29481           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   29482           0 :                 info->far_ptr = & ((M_SolidRep *) node)->bboxSize;
   29483           0 :                 return GF_OK;
   29484             :         case 1:
   29485           0 :                 info->name = "densityList";
   29486           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29487           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29488           0 :                 info->far_ptr = & ((M_SolidRep *) node)->densityList;
   29489           0 :                 return GF_OK;
   29490             :         case 2:
   29491           0 :                 info->name = "solidTree";
   29492           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29493           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29494           0 :                 info->NDTtype = NDT_SF3DNode;
   29495           0 :                 info->far_ptr = & ((M_SolidRep *)node)->solidTree;
   29496           0 :                 return GF_OK;
   29497             :         default:
   29498           0 :                 return GF_BAD_PARAM;
   29499             :         }
   29500           0 : }
   29501             : 
   29502             : 
   29503             : static s32 SolidRep_get_field_index_by_name(char *name)
   29504             : {
   29505           0 :         if (!strcmp("bboxSize", name)) return 0;
   29506           0 :         if (!strcmp("densityList", name)) return 1;
   29507           0 :         if (!strcmp("solidTree", name)) return 2;
   29508           0 :         return -1;
   29509           0 : }
   29510             : static Bool SolidRep_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29511             : {
   29512           0 :         switch (FieldIndex) {
   29513             :         case 0:
   29514           0 :                 *AType = 11;
   29515           0 :                 *QType = 11;
   29516           0 :                 *b_min = FLT2FIX(0);
   29517           0 :                 *b_max = FIX_MAX;
   29518           0 :                 return 1;
   29519             :         default:
   29520           0 :                 return 0;
   29521             :         }
   29522           0 : }
   29523             : 
   29524             : 
   29525             : 
   29526             : GF_Node *SolidRep_Create()
   29527             : {
   29528             :         M_SolidRep *p;
   29529           0 :         GF_SAFEALLOC(p, M_SolidRep);
   29530           0 :         if(!p) return NULL;
   29531           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SolidRep);
   29532             : 
   29533             :         /*default field values*/
   29534           0 :         p->bboxSize.x = FLT2FIX(2);
   29535           0 :         p->bboxSize.y = FLT2FIX(2);
   29536           0 :         p->bboxSize.z = FLT2FIX(2);
   29537           0 :         return (GF_Node *)p;
   29538           0 : }
   29539             : 
   29540             : 
   29541             : /*
   29542             :         SubdivisionSurface Node deletion
   29543             : */
   29544             : 
   29545             : static void SubdivisionSurface_Del(GF_Node *node)
   29546             : {
   29547           0 :         M_SubdivisionSurface *p = (M_SubdivisionSurface *) node;
   29548           0 :         gf_sg_mfint32_del(p->set_colorIndex);
   29549           0 :         gf_sg_mfint32_del(p->set_coordIndex);
   29550           0 :         gf_sg_mfint32_del(p->set_cornerVertexIndex);
   29551           0 :         gf_sg_mfint32_del(p->set_creaseEdgeIndex);
   29552           0 :         gf_sg_mfint32_del(p->set_creaseVertexIndex);
   29553           0 :         gf_sg_mfint32_del(p->set_dartVertexIndex);
   29554           0 :         gf_sg_mfint32_del(p->set_texCoordIndex);
   29555           0 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   29556           0 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
   29557           0 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
   29558           0 :         gf_node_unregister_children((GF_Node *) p, p->sectors);
   29559           0 :         gf_sg_mfint32_del(p->invisibleEdgeIndex);
   29560           0 :         gf_sg_mfint32_del(p->colorIndex);
   29561           0 :         gf_sg_mfint32_del(p->coordIndex);
   29562           0 :         gf_sg_mfint32_del(p->cornerVertexIndex);
   29563           0 :         gf_sg_mfint32_del(p->creaseEdgeIndex);
   29564           0 :         gf_sg_mfint32_del(p->creaseVertexIndex);
   29565           0 :         gf_sg_mfint32_del(p->dartVertexIndex);
   29566           0 :         gf_sg_mfint32_del(p->texCoordIndex);
   29567           0 :         gf_node_free((GF_Node *) p);
   29568           0 : }
   29569             : 
   29570             : static const u16 SubdivisionSurface_Def2All[] = { 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25};
   29571             : static const u16 SubdivisionSurface_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
   29572             : static const u16 SubdivisionSurface_Out2All[] = { 7, 8, 9, 10, 11, 12, 13};
   29573             : 
   29574             : static u32 SubdivisionSurface_get_field_count(GF_Node *node, u8 IndexMode)
   29575             : {
   29576           0 :         switch(IndexMode) {
   29577             :         case GF_SG_FIELD_CODING_IN:
   29578           0 :                 return 14;
   29579             :         case GF_SG_FIELD_CODING_DEF:
   29580           0 :                 return 19;
   29581             :         case GF_SG_FIELD_CODING_OUT:
   29582           0 :                 return 7;
   29583             :         case GF_SG_FIELD_CODING_DYN:
   29584           0 :                 return 0;
   29585             :         default:
   29586           0 :                 return 26;
   29587             :         }
   29588           0 : }
   29589             : 
   29590             : static GF_Err SubdivisionSurface_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29591             : {
   29592           0 :         switch(IndexMode) {
   29593             :         case GF_SG_FIELD_CODING_IN:
   29594           0 :                 *allField = SubdivisionSurface_In2All[inField];
   29595           0 :                 return GF_OK;
   29596             :         case GF_SG_FIELD_CODING_DEF:
   29597           0 :                 *allField = SubdivisionSurface_Def2All[inField];
   29598           0 :                 return GF_OK;
   29599             :         case GF_SG_FIELD_CODING_OUT:
   29600           0 :                 *allField = SubdivisionSurface_Out2All[inField];
   29601           0 :                 return GF_OK;
   29602             :         default:
   29603           0 :                 return GF_BAD_PARAM;
   29604             :         }
   29605           0 : }
   29606             : static GF_Err SubdivisionSurface_get_field(GF_Node *node, GF_FieldInfo *info)
   29607             : {
   29608           0 :         switch (info->fieldIndex) {
   29609             :         case 0:
   29610           0 :                 info->name = "set_colorIndex";
   29611           0 :                 info->eventType = GF_SG_EVENT_IN;
   29612           0 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_colorIndex;
   29613           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29614           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_colorIndex;
   29615           0 :                 return GF_OK;
   29616             :         case 1:
   29617           0 :                 info->name = "set_coordIndex";
   29618           0 :                 info->eventType = GF_SG_EVENT_IN;
   29619           0 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_coordIndex;
   29620           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29621           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_coordIndex;
   29622           0 :                 return GF_OK;
   29623             :         case 2:
   29624           0 :                 info->name = "set_cornerVertexIndex";
   29625           0 :                 info->eventType = GF_SG_EVENT_IN;
   29626           0 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_cornerVertexIndex;
   29627           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29628           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_cornerVertexIndex;
   29629           0 :                 return GF_OK;
   29630             :         case 3:
   29631           0 :                 info->name = "set_creaseEdgeIndex";
   29632           0 :                 info->eventType = GF_SG_EVENT_IN;
   29633           0 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_creaseEdgeIndex;
   29634           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29635           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_creaseEdgeIndex;
   29636           0 :                 return GF_OK;
   29637             :         case 4:
   29638           0 :                 info->name = "set_creaseVertexIndex";
   29639           0 :                 info->eventType = GF_SG_EVENT_IN;
   29640           0 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_creaseVertexIndex;
   29641           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29642           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_creaseVertexIndex;
   29643           0 :                 return GF_OK;
   29644             :         case 5:
   29645           0 :                 info->name = "set_dartVertexIndex";
   29646           0 :                 info->eventType = GF_SG_EVENT_IN;
   29647           0 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_dartVertexIndex;
   29648           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29649           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_dartVertexIndex;
   29650           0 :                 return GF_OK;
   29651             :         case 6:
   29652           0 :                 info->name = "set_texCoordIndex";
   29653           0 :                 info->eventType = GF_SG_EVENT_IN;
   29654           0 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_texCoordIndex;
   29655           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29656           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_texCoordIndex;
   29657           0 :                 return GF_OK;
   29658             :         case 7:
   29659           0 :                 info->name = "color";
   29660           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29661           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29662           0 :                 info->NDTtype = NDT_SFColorNode;
   29663           0 :                 info->far_ptr = & ((M_SubdivisionSurface *)node)->color;
   29664           0 :                 return GF_OK;
   29665             :         case 8:
   29666           0 :                 info->name = "coord";
   29667           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29668           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29669           0 :                 info->NDTtype = NDT_SFCoordinateNode;
   29670           0 :                 info->far_ptr = & ((M_SubdivisionSurface *)node)->coord;
   29671           0 :                 return GF_OK;
   29672             :         case 9:
   29673           0 :                 info->name = "texCoord";
   29674           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29675           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29676           0 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   29677           0 :                 info->far_ptr = & ((M_SubdivisionSurface *)node)->texCoord;
   29678           0 :                 return GF_OK;
   29679             :         case 10:
   29680           0 :                 info->name = "sectors";
   29681           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29682           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   29683           0 :                 info->NDTtype = NDT_SFSubdivSurfaceSectorNode;
   29684           0 :                 info->far_ptr = & ((M_SubdivisionSurface *)node)->sectors;
   29685           0 :                 return GF_OK;
   29686             :         case 11:
   29687           0 :                 info->name = "subdivisionLevel";
   29688           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29689           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29690           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->subdivisionLevel;
   29691           0 :                 return GF_OK;
   29692             :         case 12:
   29693           0 :                 info->name = "subdivisionType";
   29694           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29695           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29696           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->subdivisionType;
   29697           0 :                 return GF_OK;
   29698             :         case 13:
   29699           0 :                 info->name = "subdivisionSubType";
   29700           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29701           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29702           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->subdivisionSubType;
   29703           0 :                 return GF_OK;
   29704             :         case 14:
   29705           0 :                 info->name = "invisibleEdgeIndex";
   29706           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29707           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29708           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->invisibleEdgeIndex;
   29709           0 :                 return GF_OK;
   29710             :         case 15:
   29711           0 :                 info->name = "ccw";
   29712           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29713           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   29714           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->ccw;
   29715           0 :                 return GF_OK;
   29716             :         case 16:
   29717           0 :                 info->name = "colorIndex";
   29718           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29719           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29720           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->colorIndex;
   29721           0 :                 return GF_OK;
   29722             :         case 17:
   29723           0 :                 info->name = "colorPerVertex";
   29724           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29725           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   29726           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->colorPerVertex;
   29727           0 :                 return GF_OK;
   29728             :         case 18:
   29729           0 :                 info->name = "convex";
   29730           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29731           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   29732           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->convex;
   29733           0 :                 return GF_OK;
   29734             :         case 19:
   29735           0 :                 info->name = "coordIndex";
   29736           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29737           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29738           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->coordIndex;
   29739           0 :                 return GF_OK;
   29740             :         case 20:
   29741           0 :                 info->name = "cornerVertexIndex";
   29742           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29743           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29744           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->cornerVertexIndex;
   29745           0 :                 return GF_OK;
   29746             :         case 21:
   29747           0 :                 info->name = "creaseEdgeIndex";
   29748           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29749           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29750           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->creaseEdgeIndex;
   29751           0 :                 return GF_OK;
   29752             :         case 22:
   29753           0 :                 info->name = "creaseVertexIndex";
   29754           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29755           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29756           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->creaseVertexIndex;
   29757           0 :                 return GF_OK;
   29758             :         case 23:
   29759           0 :                 info->name = "dartVertexIndex";
   29760           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29761           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29762           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->dartVertexIndex;
   29763           0 :                 return GF_OK;
   29764             :         case 24:
   29765           0 :                 info->name = "solid";
   29766           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29767           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   29768           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->solid;
   29769           0 :                 return GF_OK;
   29770             :         case 25:
   29771           0 :                 info->name = "texCoordIndex";
   29772           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29773           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29774           0 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->texCoordIndex;
   29775           0 :                 return GF_OK;
   29776             :         default:
   29777           0 :                 return GF_BAD_PARAM;
   29778             :         }
   29779           0 : }
   29780             : 
   29781             : 
   29782             : static s32 SubdivisionSurface_get_field_index_by_name(char *name)
   29783             : {
   29784           0 :         if (!strcmp("set_colorIndex", name)) return 0;
   29785           0 :         if (!strcmp("set_coordIndex", name)) return 1;
   29786           0 :         if (!strcmp("set_cornerVertexIndex", name)) return 2;
   29787           0 :         if (!strcmp("set_creaseEdgeIndex", name)) return 3;
   29788           0 :         if (!strcmp("set_creaseVertexIndex", name)) return 4;
   29789           0 :         if (!strcmp("set_dartVertexIndex", name)) return 5;
   29790           0 :         if (!strcmp("set_texCoordIndex", name)) return 6;
   29791           0 :         if (!strcmp("color", name)) return 7;
   29792           0 :         if (!strcmp("coord", name)) return 8;
   29793           0 :         if (!strcmp("texCoord", name)) return 9;
   29794           0 :         if (!strcmp("sectors", name)) return 10;
   29795           0 :         if (!strcmp("subdivisionLevel", name)) return 11;
   29796           0 :         if (!strcmp("subdivisionType", name)) return 12;
   29797           0 :         if (!strcmp("subdivisionSubType", name)) return 13;
   29798           0 :         if (!strcmp("invisibleEdgeIndex", name)) return 14;
   29799           0 :         if (!strcmp("ccw", name)) return 15;
   29800           0 :         if (!strcmp("colorIndex", name)) return 16;
   29801           0 :         if (!strcmp("colorPerVertex", name)) return 17;
   29802           0 :         if (!strcmp("convex", name)) return 18;
   29803           0 :         if (!strcmp("coordIndex", name)) return 19;
   29804           0 :         if (!strcmp("cornerVertexIndex", name)) return 20;
   29805           0 :         if (!strcmp("creaseEdgeIndex", name)) return 21;
   29806           0 :         if (!strcmp("creaseVertexIndex", name)) return 22;
   29807           0 :         if (!strcmp("dartVertexIndex", name)) return 23;
   29808           0 :         if (!strcmp("solid", name)) return 24;
   29809           0 :         if (!strcmp("texCoordIndex", name)) return 25;
   29810           0 :         return -1;
   29811           0 : }
   29812             : static Bool SubdivisionSurface_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29813             : {
   29814           0 :         switch (FieldIndex) {
   29815             :         case 12:
   29816           0 :                 *AType = 0;
   29817           0 :                 *QType = 13;
   29818           0 :                 *QT13_bits = 2;
   29819           0 :                 *b_min = FLT2FIX(0);
   29820           0 :                 *b_max = FLT2FIX(3);
   29821           0 :                 return 1;
   29822             :         case 13:
   29823           0 :                 *AType = 0;
   29824           0 :                 *QType = 13;
   29825           0 :                 *QT13_bits = 2;
   29826           0 :                 *b_min = FLT2FIX(0);
   29827           0 :                 *b_max = FLT2FIX(3);
   29828           0 :                 return 1;
   29829             :         default:
   29830           0 :                 return 0;
   29831             :         }
   29832           0 : }
   29833             : 
   29834             : 
   29835             : 
   29836             : GF_Node *SubdivisionSurface_Create()
   29837             : {
   29838             :         M_SubdivisionSurface *p;
   29839           0 :         GF_SAFEALLOC(p, M_SubdivisionSurface);
   29840           0 :         if(!p) return NULL;
   29841           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SubdivisionSurface);
   29842             : 
   29843             :         /*default field values*/
   29844           0 :         p->subdivisionLevel = 0;
   29845           0 :         p->subdivisionType = 0;
   29846           0 :         p->subdivisionSubType = 0;
   29847           0 :         p->ccw = 1;
   29848           0 :         p->colorPerVertex = 1;
   29849           0 :         p->convex = 1;
   29850           0 :         p->solid = 1;
   29851           0 :         return (GF_Node *)p;
   29852           0 : }
   29853             : 
   29854             : 
   29855             : /*
   29856             :         SubdivSurfaceSector Node deletion
   29857             : */
   29858             : 
   29859             : static void SubdivSurfaceSector_Del(GF_Node *node)
   29860             : {
   29861           0 :         M_SubdivSurfaceSector *p = (M_SubdivSurfaceSector *) node;
   29862           0 :         gf_node_free((GF_Node *) p);
   29863           0 : }
   29864             : 
   29865             : static const u16 SubdivSurfaceSector_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   29866             : static const u16 SubdivSurfaceSector_In2All[] = { 0, 1, 2, 3, 4};
   29867             : static const u16 SubdivSurfaceSector_Out2All[] = { 0, 1, 2, 3, 4};
   29868             : 
   29869             : static u32 SubdivSurfaceSector_get_field_count(GF_Node *node, u8 IndexMode)
   29870             : {
   29871           0 :         switch(IndexMode) {
   29872             :         case GF_SG_FIELD_CODING_IN:
   29873           0 :                 return 5;
   29874             :         case GF_SG_FIELD_CODING_DEF:
   29875           0 :                 return 7;
   29876             :         case GF_SG_FIELD_CODING_OUT:
   29877           0 :                 return 5;
   29878             :         case GF_SG_FIELD_CODING_DYN:
   29879           0 :                 return 0;
   29880             :         default:
   29881           0 :                 return 7;
   29882             :         }
   29883           0 : }
   29884             : 
   29885             : static GF_Err SubdivSurfaceSector_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29886             : {
   29887           0 :         switch(IndexMode) {
   29888             :         case GF_SG_FIELD_CODING_IN:
   29889           0 :                 *allField = SubdivSurfaceSector_In2All[inField];
   29890           0 :                 return GF_OK;
   29891             :         case GF_SG_FIELD_CODING_DEF:
   29892           0 :                 *allField = SubdivSurfaceSector_Def2All[inField];
   29893           0 :                 return GF_OK;
   29894             :         case GF_SG_FIELD_CODING_OUT:
   29895           0 :                 *allField = SubdivSurfaceSector_Out2All[inField];
   29896           0 :                 return GF_OK;
   29897             :         default:
   29898           0 :                 return GF_BAD_PARAM;
   29899             :         }
   29900           0 : }
   29901             : static GF_Err SubdivSurfaceSector_get_field(GF_Node *node, GF_FieldInfo *info)
   29902             : {
   29903           0 :         switch (info->fieldIndex) {
   29904             :         case 0:
   29905           0 :                 info->name = "flatness";
   29906           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29907           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29908           0 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->flatness;
   29909           0 :                 return GF_OK;
   29910             :         case 1:
   29911           0 :                 info->name = "normal";
   29912           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29913           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   29914           0 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->normal;
   29915           0 :                 return GF_OK;
   29916             :         case 2:
   29917           0 :                 info->name = "normalTension";
   29918           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29919           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29920           0 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->normalTension;
   29921           0 :                 return GF_OK;
   29922             :         case 3:
   29923           0 :                 info->name = "tag";
   29924           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29925           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29926           0 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->_tag;
   29927           0 :                 return GF_OK;
   29928             :         case 4:
   29929           0 :                 info->name = "theta";
   29930           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29931           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29932           0 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->theta;
   29933           0 :                 return GF_OK;
   29934             :         case 5:
   29935           0 :                 info->name = "faceIndex";
   29936           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29937           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29938           0 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->faceIndex;
   29939           0 :                 return GF_OK;
   29940             :         case 6:
   29941           0 :                 info->name = "vertexIndex";
   29942           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   29943           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29944           0 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->vertexIndex;
   29945           0 :                 return GF_OK;
   29946             :         default:
   29947           0 :                 return GF_BAD_PARAM;
   29948             :         }
   29949           0 : }
   29950             : 
   29951             : 
   29952             : static s32 SubdivSurfaceSector_get_field_index_by_name(char *name)
   29953             : {
   29954           0 :         if (!strcmp("flatness", name)) return 0;
   29955           0 :         if (!strcmp("normal", name)) return 1;
   29956           0 :         if (!strcmp("normalTension", name)) return 2;
   29957           0 :         if (!strcmp("tag", name)) return 3;
   29958           0 :         if (!strcmp("theta", name)) return 4;
   29959           0 :         if (!strcmp("faceIndex", name)) return 5;
   29960           0 :         if (!strcmp("vertexIndex", name)) return 6;
   29961           0 :         return -1;
   29962           0 : }
   29963             : static Bool SubdivSurfaceSector_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29964             : {
   29965           0 :         switch (FieldIndex) {
   29966             :         case 0:
   29967           0 :                 *AType = 0;
   29968           0 :                 *QType = 7;
   29969           0 :                 *b_min = FLT2FIX(0);
   29970           0 :                 *b_max = FLT2FIX(1);
   29971           0 :                 return 1;
   29972             :         case 1:
   29973           0 :                 *AType = 0;
   29974           0 :                 *QType = 9;
   29975           0 :                 return 1;
   29976             :         case 2:
   29977           0 :                 *AType = 0;
   29978           0 :                 *QType = 7;
   29979           0 :                 *b_min = FLT2FIX(0);
   29980           0 :                 *b_max = FLT2FIX(1);
   29981           0 :                 return 1;
   29982             :         case 3:
   29983           0 :                 *AType = 0;
   29984           0 :                 *QType = 13;
   29985           0 :                 *QT13_bits = 2;
   29986           0 :                 *b_min = FLT2FIX(0);
   29987           0 :                 *b_max = FLT2FIX(2);
   29988           0 :                 return 1;
   29989             :         case 4:
   29990           0 :                 *AType = 0;
   29991           0 :                 *QType = 6;
   29992           0 :                 *b_min = FLT2FIX(0);
   29993           0 :                 *b_max = FLT2FIX(6.2831853);
   29994           0 :                 return 1;
   29995             :         case 5:
   29996           0 :                 *AType = 0;
   29997           0 :                 *QType = 14;
   29998           0 :                 return 1;
   29999             :         case 6:
   30000           0 :                 *AType = 0;
   30001           0 :                 *QType = 14;
   30002           0 :                 return 1;
   30003             :         default:
   30004           0 :                 return 0;
   30005             :         }
   30006           0 : }
   30007             : 
   30008             : 
   30009             : 
   30010             : GF_Node *SubdivSurfaceSector_Create()
   30011             : {
   30012             :         M_SubdivSurfaceSector *p;
   30013           0 :         GF_SAFEALLOC(p, M_SubdivSurfaceSector);
   30014           0 :         if(!p) return NULL;
   30015           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SubdivSurfaceSector);
   30016             : 
   30017             :         /*default field values*/
   30018           0 :         p->flatness = FLT2FIX(0);
   30019           0 :         p->normal.x = FLT2FIX(0);
   30020           0 :         p->normal.y = FLT2FIX(0);
   30021           0 :         p->normal.z = FLT2FIX(0);
   30022           0 :         p->normalTension = FLT2FIX(0);
   30023           0 :         p->_tag = 0;
   30024           0 :         p->theta = FLT2FIX(0);
   30025           0 :         p->faceIndex = 0;
   30026           0 :         p->vertexIndex = 0;
   30027           0 :         return (GF_Node *)p;
   30028           0 : }
   30029             : 
   30030             : 
   30031             : /*
   30032             :         WaveletSubdivisionSurface Node deletion
   30033             : */
   30034             : 
   30035             : static void WaveletSubdivisionSurface_Del(GF_Node *node)
   30036             : {
   30037           0 :         M_WaveletSubdivisionSurface *p = (M_WaveletSubdivisionSurface *) node;
   30038           0 :         gf_node_unregister((GF_Node *) p->baseMesh, (GF_Node *) p);
   30039           0 :         gf_node_free((GF_Node *) p);
   30040           0 : }
   30041             : 
   30042             : static const u16 WaveletSubdivisionSurface_Def2All[] = { 0, 1, 2, 3};
   30043             : static const u16 WaveletSubdivisionSurface_In2All[] = { 0, 1, 2, 3};
   30044             : static const u16 WaveletSubdivisionSurface_Out2All[] = { 0, 1, 2, 3};
   30045             : 
   30046             : static u32 WaveletSubdivisionSurface_get_field_count(GF_Node *node, u8 IndexMode)
   30047             : {
   30048           0 :         switch(IndexMode) {
   30049             :         case GF_SG_FIELD_CODING_IN:
   30050           0 :                 return 4;
   30051             :         case GF_SG_FIELD_CODING_DEF:
   30052           0 :                 return 4;
   30053             :         case GF_SG_FIELD_CODING_OUT:
   30054           0 :                 return 4;
   30055             :         case GF_SG_FIELD_CODING_DYN:
   30056           0 :                 return 0;
   30057             :         default:
   30058           0 :                 return 4;
   30059             :         }
   30060           0 : }
   30061             : 
   30062             : static GF_Err WaveletSubdivisionSurface_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30063             : {
   30064           0 :         switch(IndexMode) {
   30065             :         case GF_SG_FIELD_CODING_IN:
   30066           0 :                 *allField = WaveletSubdivisionSurface_In2All[inField];
   30067           0 :                 return GF_OK;
   30068             :         case GF_SG_FIELD_CODING_DEF:
   30069           0 :                 *allField = WaveletSubdivisionSurface_Def2All[inField];
   30070           0 :                 return GF_OK;
   30071             :         case GF_SG_FIELD_CODING_OUT:
   30072           0 :                 *allField = WaveletSubdivisionSurface_Out2All[inField];
   30073           0 :                 return GF_OK;
   30074             :         default:
   30075           0 :                 return GF_BAD_PARAM;
   30076             :         }
   30077           0 : }
   30078             : static GF_Err WaveletSubdivisionSurface_get_field(GF_Node *node, GF_FieldInfo *info)
   30079             : {
   30080           0 :         switch (info->fieldIndex) {
   30081             :         case 0:
   30082           0 :                 info->name = "baseMesh";
   30083           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30084           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   30085           0 :                 info->NDTtype = NDT_SFGeometryNode;
   30086           0 :                 info->far_ptr = & ((M_WaveletSubdivisionSurface *)node)->baseMesh;
   30087           0 :                 return GF_OK;
   30088             :         case 1:
   30089           0 :                 info->name = "fieldOfView";
   30090           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30091           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30092           0 :                 info->far_ptr = & ((M_WaveletSubdivisionSurface *) node)->fieldOfView;
   30093           0 :                 return GF_OK;
   30094             :         case 2:
   30095           0 :                 info->name = "frequency";
   30096           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30097           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30098           0 :                 info->far_ptr = & ((M_WaveletSubdivisionSurface *) node)->frequency;
   30099           0 :                 return GF_OK;
   30100             :         case 3:
   30101           0 :                 info->name = "quality";
   30102           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30103           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   30104           0 :                 info->far_ptr = & ((M_WaveletSubdivisionSurface *) node)->quality;
   30105           0 :                 return GF_OK;
   30106             :         default:
   30107           0 :                 return GF_BAD_PARAM;
   30108             :         }
   30109           0 : }
   30110             : 
   30111             : 
   30112             : static s32 WaveletSubdivisionSurface_get_field_index_by_name(char *name)
   30113             : {
   30114           0 :         if (!strcmp("baseMesh", name)) return 0;
   30115           0 :         if (!strcmp("fieldOfView", name)) return 1;
   30116           0 :         if (!strcmp("frequency", name)) return 2;
   30117           0 :         if (!strcmp("quality", name)) return 3;
   30118           0 :         return -1;
   30119           0 : }
   30120             : static Bool WaveletSubdivisionSurface_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30121             : {
   30122             :         switch (FieldIndex) {
   30123             :         default:
   30124           0 :                 return 0;
   30125             :         }
   30126             : }
   30127             : 
   30128             : 
   30129             : 
   30130             : GF_Node *WaveletSubdivisionSurface_Create()
   30131             : {
   30132             :         M_WaveletSubdivisionSurface *p;
   30133           0 :         GF_SAFEALLOC(p, M_WaveletSubdivisionSurface);
   30134           0 :         if(!p) return NULL;
   30135           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_WaveletSubdivisionSurface);
   30136             : 
   30137             :         /*default field values*/
   30138           0 :         p->fieldOfView = FLT2FIX(0.785398);
   30139           0 :         p->frequency = FLT2FIX(1.0);
   30140           0 :         p->quality = 1;
   30141           0 :         return (GF_Node *)p;
   30142           0 : }
   30143             : 
   30144             : 
   30145             : /*
   30146             :         Clipper2D Node deletion
   30147             : */
   30148             : 
   30149             : static void Clipper2D_Del(GF_Node *node)
   30150             : {
   30151          72 :         M_Clipper2D *p = (M_Clipper2D *) node;
   30152          36 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   30153          36 :         gf_node_unregister((GF_Node *) p->transform, (GF_Node *) p);
   30154          36 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   30155          36 :         gf_node_free((GF_Node *) p);
   30156          36 : }
   30157             : 
   30158             : static const u16 Clipper2D_Def2All[] = { 2, 3, 4, 5, 6};
   30159             : static const u16 Clipper2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   30160             : static const u16 Clipper2D_Out2All[] = { 2, 3, 4, 5, 6};
   30161             : 
   30162             : static u32 Clipper2D_get_field_count(GF_Node *node, u8 IndexMode)
   30163             : {
   30164         172 :         switch(IndexMode) {
   30165             :         case GF_SG_FIELD_CODING_IN:
   30166          54 :                 return 7;
   30167             :         case GF_SG_FIELD_CODING_DEF:
   30168          18 :                 return 5;
   30169             :         case GF_SG_FIELD_CODING_OUT:
   30170           0 :                 return 5;
   30171             :         case GF_SG_FIELD_CODING_DYN:
   30172           0 :                 return 0;
   30173             :         default:
   30174          14 :                 return 7;
   30175             :         }
   30176          86 : }
   30177             : 
   30178             : static GF_Err Clipper2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30179             : {
   30180         316 :         switch(IndexMode) {
   30181             :         case GF_SG_FIELD_CODING_IN:
   30182          98 :                 *allField = Clipper2D_In2All[inField];
   30183          98 :                 return GF_OK;
   30184             :         case GF_SG_FIELD_CODING_DEF:
   30185          60 :                 *allField = Clipper2D_Def2All[inField];
   30186          60 :                 return GF_OK;
   30187             :         case GF_SG_FIELD_CODING_OUT:
   30188           0 :                 *allField = Clipper2D_Out2All[inField];
   30189           0 :                 return GF_OK;
   30190             :         default:
   30191           0 :                 return GF_BAD_PARAM;
   30192             :         }
   30193         158 : }
   30194             : static GF_Err Clipper2D_get_field(GF_Node *node, GF_FieldInfo *info)
   30195             : {
   30196         728 :         switch (info->fieldIndex) {
   30197             :         case 0:
   30198          14 :                 info->name = "addChildren";
   30199          14 :                 info->eventType = GF_SG_EVENT_IN;
   30200          14 :                 info->on_event_in = ((M_Clipper2D *)node)->on_addChildren;
   30201          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30202          14 :                 info->NDTtype = NDT_SF2DNode;
   30203          14 :                 info->far_ptr = & ((M_Clipper2D *)node)->addChildren;
   30204          14 :                 return GF_OK;
   30205             :         case 1:
   30206          14 :                 info->name = "removeChildren";
   30207          14 :                 info->eventType = GF_SG_EVENT_IN;
   30208          14 :                 info->on_event_in = ((M_Clipper2D *)node)->on_removeChildren;
   30209          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30210          14 :                 info->NDTtype = NDT_SF2DNode;
   30211          14 :                 info->far_ptr = & ((M_Clipper2D *)node)->removeChildren;
   30212          14 :                 return GF_OK;
   30213             :         case 2:
   30214          48 :                 info->name = "children";
   30215          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30216          48 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30217          48 :                 info->NDTtype = NDT_SF2DNode;
   30218          48 :                 info->far_ptr = & ((M_Clipper2D *)node)->children;
   30219          48 :                 return GF_OK;
   30220             :         case 3:
   30221          48 :                 info->name = "geometry";
   30222          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30223          48 :                 info->fieldType = GF_SG_VRML_SFNODE;
   30224          48 :                 info->NDTtype = NDT_SFGeometryNode;
   30225          48 :                 info->far_ptr = & ((M_Clipper2D *)node)->geometry;
   30226          48 :                 return GF_OK;
   30227             :         case 4:
   30228         126 :                 info->name = "inside";
   30229         126 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30230         126 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   30231         126 :                 info->far_ptr = & ((M_Clipper2D *) node)->inside;
   30232         126 :                 return GF_OK;
   30233             :         case 5:
   30234          48 :                 info->name = "transform";
   30235          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30236          48 :                 info->fieldType = GF_SG_VRML_SFNODE;
   30237          48 :                 info->NDTtype = NDT_SF2DNode;
   30238          48 :                 info->far_ptr = & ((M_Clipper2D *)node)->transform;
   30239          48 :                 return GF_OK;
   30240             :         case 6:
   30241          66 :                 info->name = "XOR";
   30242          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30243          66 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   30244          66 :                 info->far_ptr = & ((M_Clipper2D *) node)->XOR;
   30245          66 :                 return GF_OK;
   30246             :         default:
   30247           0 :                 return GF_BAD_PARAM;
   30248             :         }
   30249         364 : }
   30250             : 
   30251             : 
   30252             : static s32 Clipper2D_get_field_index_by_name(char *name)
   30253             : {
   30254         112 :         if (!strcmp("addChildren", name)) return 0;
   30255          56 :         if (!strcmp("removeChildren", name)) return 1;
   30256          64 :         if (!strcmp("children", name)) return 2;
   30257          56 :         if (!strcmp("geometry", name)) return 3;
   30258          64 :         if (!strcmp("inside", name)) return 4;
   30259          24 :         if (!strcmp("transform", name)) return 5;
   30260          16 :         if (!strcmp("XOR", name)) return 6;
   30261           0 :         return -1;
   30262          56 : }
   30263             : static Bool Clipper2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30264             : {
   30265             :         switch (FieldIndex) {
   30266             :         default:
   30267           0 :                 return 0;
   30268             :         }
   30269             : }
   30270             : 
   30271             : 
   30272             : 
   30273             : GF_Node *Clipper2D_Create()
   30274             : {
   30275             :         M_Clipper2D *p;
   30276         108 :         GF_SAFEALLOC(p, M_Clipper2D);
   30277          36 :         if(!p) return NULL;
   30278          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Clipper2D);
   30279          36 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   30280             : 
   30281             :         /*default field values*/
   30282          36 :         p->inside = 1;
   30283          36 :         return (GF_Node *)p;
   30284          36 : }
   30285             : 
   30286             : 
   30287             : /*
   30288             :         ColorTransform Node deletion
   30289             : */
   30290             : 
   30291             : static void ColorTransform_Del(GF_Node *node)
   30292             : {
   30293         198 :         M_ColorTransform *p = (M_ColorTransform *) node;
   30294          99 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   30295          99 :         gf_node_free((GF_Node *) p);
   30296          99 : }
   30297             : 
   30298             : static const u16 ColorTransform_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
   30299             : static const u16 ColorTransform_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
   30300             : static const u16 ColorTransform_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
   30301             : static const u16 ColorTransform_Dyn2All[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
   30302             : 
   30303             : static u32 ColorTransform_get_field_count(GF_Node *node, u8 IndexMode)
   30304             : {
   30305         298 :         switch(IndexMode) {
   30306             :         case GF_SG_FIELD_CODING_IN:
   30307          54 :                 return 23;
   30308             :         case GF_SG_FIELD_CODING_DEF:
   30309          44 :                 return 21;
   30310             :         case GF_SG_FIELD_CODING_OUT:
   30311           0 :                 return 21;
   30312             :         case GF_SG_FIELD_CODING_DYN:
   30313           0 :                 return 20;
   30314             :         default:
   30315          51 :                 return 23;
   30316             :         }
   30317         149 : }
   30318             : 
   30319             : static GF_Err ColorTransform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30320             : {
   30321         988 :         switch(IndexMode) {
   30322             :         case GF_SG_FIELD_CODING_IN:
   30323         200 :                 *allField = ColorTransform_In2All[inField];
   30324         200 :                 return GF_OK;
   30325             :         case GF_SG_FIELD_CODING_DEF:
   30326         294 :                 *allField = ColorTransform_Def2All[inField];
   30327         294 :                 return GF_OK;
   30328             :         case GF_SG_FIELD_CODING_OUT:
   30329           0 :                 *allField = ColorTransform_Out2All[inField];
   30330           0 :                 return GF_OK;
   30331             :         case GF_SG_FIELD_CODING_DYN:
   30332           0 :                 *allField = ColorTransform_Dyn2All[inField];
   30333           0 :                 return GF_OK;
   30334             :         default:
   30335           0 :                 return GF_BAD_PARAM;
   30336             :         }
   30337         494 : }
   30338             : static GF_Err ColorTransform_get_field(GF_Node *node, GF_FieldInfo *info)
   30339             : {
   30340        5036 :         switch (info->fieldIndex) {
   30341             :         case 0:
   30342          44 :                 info->name = "addChildren";
   30343          44 :                 info->eventType = GF_SG_EVENT_IN;
   30344          44 :                 info->on_event_in = ((M_ColorTransform *)node)->on_addChildren;
   30345          44 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30346          44 :                 info->NDTtype = NDT_SF3DNode;
   30347          44 :                 info->far_ptr = & ((M_ColorTransform *)node)->addChildren;
   30348          44 :                 return GF_OK;
   30349             :         case 1:
   30350          44 :                 info->name = "removeChildren";
   30351          44 :                 info->eventType = GF_SG_EVENT_IN;
   30352          44 :                 info->on_event_in = ((M_ColorTransform *)node)->on_removeChildren;
   30353          44 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30354          44 :                 info->NDTtype = NDT_SF3DNode;
   30355          44 :                 info->far_ptr = & ((M_ColorTransform *)node)->removeChildren;
   30356          44 :                 return GF_OK;
   30357             :         case 2:
   30358         141 :                 info->name = "children";
   30359         141 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30360         141 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30361         141 :                 info->NDTtype = NDT_SF3DNode;
   30362         141 :                 info->far_ptr = & ((M_ColorTransform *)node)->children;
   30363         141 :                 return GF_OK;
   30364             :         case 3:
   30365         157 :                 info->name = "mrr";
   30366         157 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30367         157 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30368         157 :                 info->far_ptr = & ((M_ColorTransform *) node)->mrr;
   30369         157 :                 return GF_OK;
   30370             :         case 4:
   30371          96 :                 info->name = "mrg";
   30372          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30373          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30374          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mrg;
   30375          96 :                 return GF_OK;
   30376             :         case 5:
   30377         120 :                 info->name = "mrb";
   30378         120 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30379         120 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30380         120 :                 info->far_ptr = & ((M_ColorTransform *) node)->mrb;
   30381         120 :                 return GF_OK;
   30382             :         case 6:
   30383          96 :                 info->name = "mra";
   30384          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30385          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30386          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mra;
   30387          96 :                 return GF_OK;
   30388             :         case 7:
   30389         114 :                 info->name = "tr";
   30390         114 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30391         114 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30392         114 :                 info->far_ptr = & ((M_ColorTransform *) node)->tr;
   30393         114 :                 return GF_OK;
   30394             :         case 8:
   30395          96 :                 info->name = "mgr";
   30396          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30397          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30398          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mgr;
   30399          96 :                 return GF_OK;
   30400             :         case 9:
   30401         145 :                 info->name = "mgg";
   30402         145 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30403         145 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30404         145 :                 info->far_ptr = & ((M_ColorTransform *) node)->mgg;
   30405         145 :                 return GF_OK;
   30406             :         case 10:
   30407          96 :                 info->name = "mgb";
   30408          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30409          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30410          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mgb;
   30411          96 :                 return GF_OK;
   30412             :         case 11:
   30413          96 :                 info->name = "mga";
   30414          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30415          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30416          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mga;
   30417          96 :                 return GF_OK;
   30418             :         case 12:
   30419         110 :                 info->name = "tg";
   30420         110 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30421         110 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30422         110 :                 info->far_ptr = & ((M_ColorTransform *) node)->tg;
   30423         110 :                 return GF_OK;
   30424             :         case 13:
   30425          96 :                 info->name = "mbr";
   30426          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30427          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30428          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mbr;
   30429          96 :                 return GF_OK;
   30430             :         case 14:
   30431          96 :                 info->name = "mbg";
   30432          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30433          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30434          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mbg;
   30435          96 :                 return GF_OK;
   30436             :         case 15:
   30437         171 :                 info->name = "mbb";
   30438         171 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30439         171 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30440         171 :                 info->far_ptr = & ((M_ColorTransform *) node)->mbb;
   30441         171 :                 return GF_OK;
   30442             :         case 16:
   30443          96 :                 info->name = "mba";
   30444          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30445          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30446          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mba;
   30447          96 :                 return GF_OK;
   30448             :         case 17:
   30449         110 :                 info->name = "tb";
   30450         110 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30451         110 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30452         110 :                 info->far_ptr = & ((M_ColorTransform *) node)->tb;
   30453         110 :                 return GF_OK;
   30454             :         case 18:
   30455          96 :                 info->name = "mar";
   30456          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30457          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30458          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mar;
   30459          96 :                 return GF_OK;
   30460             :         case 19:
   30461          96 :                 info->name = "mag";
   30462          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30463          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30464          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mag;
   30465          96 :                 return GF_OK;
   30466             :         case 20:
   30467          96 :                 info->name = "mab";
   30468          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30469          96 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30470          96 :                 info->far_ptr = & ((M_ColorTransform *) node)->mab;
   30471          96 :                 return GF_OK;
   30472             :         case 21:
   30473         157 :                 info->name = "maa";
   30474         157 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30475         157 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30476         157 :                 info->far_ptr = & ((M_ColorTransform *) node)->maa;
   30477         157 :                 return GF_OK;
   30478             :         case 22:
   30479         149 :                 info->name = "ta";
   30480         149 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30481         149 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30482         149 :                 info->far_ptr = & ((M_ColorTransform *) node)->ta;
   30483         149 :                 return GF_OK;
   30484             :         default:
   30485           0 :                 return GF_BAD_PARAM;
   30486             :         }
   30487        2518 : }
   30488             : 
   30489             : 
   30490             : static s32 ColorTransform_get_field_index_by_name(char *name)
   30491             : {
   30492         288 :         if (!strcmp("addChildren", name)) return 0;
   30493         144 :         if (!strcmp("removeChildren", name)) return 1;
   30494         168 :         if (!strcmp("children", name)) return 2;
   30495         140 :         if (!strcmp("mrr", name)) return 3;
   30496         100 :         if (!strcmp("mrg", name)) return 4;
   30497         112 :         if (!strcmp("mrb", name)) return 5;
   30498          88 :         if (!strcmp("mra", name)) return 6;
   30499          96 :         if (!strcmp("tr", name)) return 7;
   30500          80 :         if (!strcmp("mgr", name)) return 8;
   30501          96 :         if (!strcmp("mgg", name)) return 9;
   30502          64 :         if (!strcmp("mgb", name)) return 10;
   30503          64 :         if (!strcmp("mga", name)) return 11;
   30504          68 :         if (!strcmp("tg", name)) return 12;
   30505          60 :         if (!strcmp("mbr", name)) return 13;
   30506          60 :         if (!strcmp("mbg", name)) return 14;
   30507          80 :         if (!strcmp("mbb", name)) return 15;
   30508          40 :         if (!strcmp("mba", name)) return 16;
   30509          44 :         if (!strcmp("tb", name)) return 17;
   30510          36 :         if (!strcmp("mar", name)) return 18;
   30511          36 :         if (!strcmp("mag", name)) return 19;
   30512          36 :         if (!strcmp("mab", name)) return 20;
   30513          56 :         if (!strcmp("maa", name)) return 21;
   30514          32 :         if (!strcmp("ta", name)) return 22;
   30515           0 :         return -1;
   30516         144 : }
   30517             : static Bool ColorTransform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30518             : {
   30519           0 :         switch (FieldIndex) {
   30520             :         case 3:
   30521           0 :                 *AType = 7;
   30522           0 :                 *QType = 7;
   30523           0 :                 *b_min = FIX_MIN;
   30524           0 :                 *b_max = FIX_MAX;
   30525           0 :                 return 1;
   30526             :         case 4:
   30527           0 :                 *AType = 7;
   30528           0 :                 *QType = 7;
   30529           0 :                 *b_min = FIX_MIN;
   30530           0 :                 *b_max = FIX_MAX;
   30531           0 :                 return 1;
   30532             :         case 5:
   30533           0 :                 *AType = 7;
   30534           0 :                 *QType = 7;
   30535           0 :                 *b_min = FIX_MIN;
   30536           0 :                 *b_max = FIX_MAX;
   30537           0 :                 return 1;
   30538             :         case 6:
   30539           0 :                 *AType = 7;
   30540           0 :                 *QType = 7;
   30541           0 :                 *b_min = FIX_MIN;
   30542           0 :                 *b_max = FIX_MAX;
   30543           0 :                 return 1;
   30544             :         case 7:
   30545           0 :                 *AType = 7;
   30546           0 :                 *QType = 4;
   30547           0 :                 *b_min = FIX_MIN;
   30548           0 :                 *b_max = FIX_MAX;
   30549           0 :                 return 1;
   30550             :         case 8:
   30551           0 :                 *AType = 7;
   30552           0 :                 *QType = 7;
   30553           0 :                 *b_min = FIX_MIN;
   30554           0 :                 *b_max = FIX_MAX;
   30555           0 :                 return 1;
   30556             :         case 9:
   30557           0 :                 *AType = 7;
   30558           0 :                 *QType = 7;
   30559           0 :                 *b_min = FIX_MIN;
   30560           0 :                 *b_max = FIX_MAX;
   30561           0 :                 return 1;
   30562             :         case 10:
   30563           0 :                 *AType = 7;
   30564           0 :                 *QType = 7;
   30565           0 :                 *b_min = FIX_MIN;
   30566           0 :                 *b_max = FIX_MAX;
   30567           0 :                 return 1;
   30568             :         case 11:
   30569           0 :                 *AType = 7;
   30570           0 :                 *QType = 7;
   30571           0 :                 *b_min = FIX_MIN;
   30572           0 :                 *b_max = FIX_MAX;
   30573           0 :                 return 1;
   30574             :         case 12:
   30575           0 :                 *AType = 7;
   30576           0 :                 *QType = 4;
   30577           0 :                 *b_min = FIX_MIN;
   30578           0 :                 *b_max = FIX_MAX;
   30579           0 :                 return 1;
   30580             :         case 13:
   30581           0 :                 *AType = 7;
   30582           0 :                 *QType = 7;
   30583           0 :                 *b_min = FIX_MIN;
   30584           0 :                 *b_max = FIX_MAX;
   30585           0 :                 return 1;
   30586             :         case 14:
   30587           0 :                 *AType = 7;
   30588           0 :                 *QType = 7;
   30589           0 :                 *b_min = FIX_MIN;
   30590           0 :                 *b_max = FIX_MAX;
   30591           0 :                 return 1;
   30592             :         case 15:
   30593           0 :                 *AType = 7;
   30594           0 :                 *QType = 7;
   30595           0 :                 *b_min = FIX_MIN;
   30596           0 :                 *b_max = FIX_MAX;
   30597           0 :                 return 1;
   30598             :         case 16:
   30599           0 :                 *AType = 7;
   30600           0 :                 *QType = 7;
   30601           0 :                 *b_min = FIX_MIN;
   30602           0 :                 *b_max = FIX_MAX;
   30603           0 :                 return 1;
   30604             :         case 17:
   30605           0 :                 *AType = 7;
   30606           0 :                 *QType = 4;
   30607           0 :                 *b_min = FIX_MIN;
   30608           0 :                 *b_max = FIX_MAX;
   30609           0 :                 return 1;
   30610             :         case 18:
   30611           0 :                 *AType = 7;
   30612           0 :                 *QType = 7;
   30613           0 :                 *b_min = FIX_MIN;
   30614           0 :                 *b_max = FIX_MAX;
   30615           0 :                 return 1;
   30616             :         case 19:
   30617           0 :                 *AType = 7;
   30618           0 :                 *QType = 7;
   30619           0 :                 *b_min = FIX_MIN;
   30620           0 :                 *b_max = FIX_MAX;
   30621           0 :                 return 1;
   30622             :         case 20:
   30623           0 :                 *AType = 7;
   30624           0 :                 *QType = 7;
   30625           0 :                 *b_min = FIX_MIN;
   30626           0 :                 *b_max = FIX_MAX;
   30627           0 :                 return 1;
   30628             :         case 21:
   30629           0 :                 *AType = 7;
   30630           0 :                 *QType = 7;
   30631           0 :                 *b_min = FIX_MIN;
   30632           0 :                 *b_max = FIX_MAX;
   30633           0 :                 return 1;
   30634             :         case 22:
   30635           0 :                 *AType = 7;
   30636           0 :                 *QType = 4;
   30637           0 :                 *b_min = FIX_MIN;
   30638           0 :                 *b_max = FIX_MAX;
   30639           0 :                 return 1;
   30640             :         default:
   30641           0 :                 return 0;
   30642             :         }
   30643           0 : }
   30644             : 
   30645             : 
   30646             : 
   30647             : GF_Node *ColorTransform_Create()
   30648             : {
   30649             :         M_ColorTransform *p;
   30650         297 :         GF_SAFEALLOC(p, M_ColorTransform);
   30651          99 :         if(!p) return NULL;
   30652          99 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ColorTransform);
   30653          99 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   30654             : 
   30655             :         /*default field values*/
   30656          99 :         p->mrr = FLT2FIX(1);
   30657          99 :         p->mrg = FLT2FIX(0);
   30658          99 :         p->mrb = FLT2FIX(0);
   30659          99 :         p->mra = FLT2FIX(0);
   30660          99 :         p->tr = FLT2FIX(0);
   30661          99 :         p->mgr = FLT2FIX(0);
   30662          99 :         p->mgg = FLT2FIX(1);
   30663          99 :         p->mgb = FLT2FIX(0);
   30664          99 :         p->mga = FLT2FIX(0);
   30665          99 :         p->tg = FLT2FIX(0);
   30666          99 :         p->mbr = FLT2FIX(0);
   30667          99 :         p->mbg = FLT2FIX(0);
   30668          99 :         p->mbb = FLT2FIX(1);
   30669          99 :         p->mba = FLT2FIX(0);
   30670          99 :         p->tb = FLT2FIX(0);
   30671          99 :         p->mar = FLT2FIX(0);
   30672          99 :         p->mag = FLT2FIX(0);
   30673          99 :         p->mab = FLT2FIX(0);
   30674          99 :         p->maa = FLT2FIX(1);
   30675          99 :         p->ta = FLT2FIX(0);
   30676          99 :         return (GF_Node *)p;
   30677          99 : }
   30678             : 
   30679             : 
   30680             : /*
   30681             :         Ellipse Node deletion
   30682             : */
   30683             : 
   30684             : static void Ellipse_Del(GF_Node *node)
   30685             : {
   30686          72 :         M_Ellipse *p = (M_Ellipse *) node;
   30687          36 :         gf_node_free((GF_Node *) p);
   30688          36 : }
   30689             : 
   30690             : static const u16 Ellipse_Def2All[] = { 0};
   30691             : static const u16 Ellipse_In2All[] = { 0};
   30692             : static const u16 Ellipse_Out2All[] = { 0};
   30693             : static const u16 Ellipse_Dyn2All[] = { 0};
   30694             : 
   30695             : static u32 Ellipse_get_field_count(GF_Node *node, u8 IndexMode)
   30696             : {
   30697          64 :         switch(IndexMode) {
   30698             :         case GF_SG_FIELD_CODING_IN:
   30699           0 :                 return 1;
   30700             :         case GF_SG_FIELD_CODING_DEF:
   30701          18 :                 return 1;
   30702             :         case GF_SG_FIELD_CODING_OUT:
   30703           0 :                 return 1;
   30704             :         case GF_SG_FIELD_CODING_DYN:
   30705           0 :                 return 1;
   30706             :         default:
   30707          14 :                 return 1;
   30708             :         }
   30709          32 : }
   30710             : 
   30711             : static GF_Err Ellipse_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30712             : {
   30713          28 :         switch(IndexMode) {
   30714             :         case GF_SG_FIELD_CODING_IN:
   30715           0 :                 *allField = Ellipse_In2All[inField];
   30716           0 :                 return GF_OK;
   30717             :         case GF_SG_FIELD_CODING_DEF:
   30718          14 :                 *allField = Ellipse_Def2All[inField];
   30719          14 :                 return GF_OK;
   30720             :         case GF_SG_FIELD_CODING_OUT:
   30721           0 :                 *allField = Ellipse_Out2All[inField];
   30722           0 :                 return GF_OK;
   30723             :         case GF_SG_FIELD_CODING_DYN:
   30724           0 :                 *allField = Ellipse_Dyn2All[inField];
   30725           0 :                 return GF_OK;
   30726             :         default:
   30727           0 :                 return GF_BAD_PARAM;
   30728             :         }
   30729          14 : }
   30730             : static GF_Err Ellipse_get_field(GF_Node *node, GF_FieldInfo *info)
   30731             : {
   30732         132 :         switch (info->fieldIndex) {
   30733             :         case 0:
   30734          66 :                 info->name = "radius";
   30735          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30736          66 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   30737          66 :                 info->far_ptr = & ((M_Ellipse *) node)->radius;
   30738          66 :                 return GF_OK;
   30739             :         default:
   30740           0 :                 return GF_BAD_PARAM;
   30741             :         }
   30742          66 : }
   30743             : 
   30744             : 
   30745             : static s32 Ellipse_get_field_index_by_name(char *name)
   30746             : {
   30747          24 :         if (!strcmp("radius", name)) return 0;
   30748           0 :         return -1;
   30749           8 : }
   30750             : static Bool Ellipse_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30751             : {
   30752           0 :         switch (FieldIndex) {
   30753             :         case 0:
   30754           0 :                 *AType = 2;
   30755           0 :                 *QType = 12;
   30756           0 :                 *b_min = FLT2FIX(0);
   30757           0 :                 *b_max = FIX_MAX;
   30758           0 :                 return 1;
   30759             :         default:
   30760           0 :                 return 0;
   30761             :         }
   30762           0 : }
   30763             : 
   30764             : 
   30765             : 
   30766             : GF_Node *Ellipse_Create()
   30767             : {
   30768             :         M_Ellipse *p;
   30769         108 :         GF_SAFEALLOC(p, M_Ellipse);
   30770          36 :         if(!p) return NULL;
   30771          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Ellipse);
   30772             : 
   30773             :         /*default field values*/
   30774          36 :         p->radius.x = FLT2FIX(1);
   30775          36 :         p->radius.y = FLT2FIX(1);
   30776          36 :         return (GF_Node *)p;
   30777          36 : }
   30778             : 
   30779             : 
   30780             : /*
   30781             :         LinearGradient Node deletion
   30782             : */
   30783             : 
   30784             : static void LinearGradient_Del(GF_Node *node)
   30785             : {
   30786         220 :         M_LinearGradient *p = (M_LinearGradient *) node;
   30787         110 :         gf_sg_mffloat_del(p->key);
   30788         110 :         gf_sg_mfcolor_del(p->keyValue);
   30789         110 :         gf_sg_mffloat_del(p->opacity);
   30790         110 :         gf_node_unregister((GF_Node *) p->transform, (GF_Node *) p);
   30791         110 :         gf_node_free((GF_Node *) p);
   30792         110 : }
   30793             : 
   30794             : static const u16 LinearGradient_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   30795             : static const u16 LinearGradient_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   30796             : static const u16 LinearGradient_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   30797             : static const u16 LinearGradient_Dyn2All[] = { 0, 5};
   30798             : 
   30799             : static u32 LinearGradient_get_field_count(GF_Node *node, u8 IndexMode)
   30800             : {
   30801         374 :         switch(IndexMode) {
   30802             :         case GF_SG_FIELD_CODING_IN:
   30803          99 :                 return 7;
   30804             :         case GF_SG_FIELD_CODING_DEF:
   30805          45 :                 return 7;
   30806             :         case GF_SG_FIELD_CODING_OUT:
   30807           0 :                 return 7;
   30808             :         case GF_SG_FIELD_CODING_DYN:
   30809           0 :                 return 2;
   30810             :         default:
   30811          43 :                 return 7;
   30812             :         }
   30813         187 : }
   30814             : 
   30815             : static GF_Err LinearGradient_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30816             : {
   30817         582 :         switch(IndexMode) {
   30818             :         case GF_SG_FIELD_CODING_IN:
   30819         141 :                 *allField = LinearGradient_In2All[inField];
   30820         141 :                 return GF_OK;
   30821             :         case GF_SG_FIELD_CODING_DEF:
   30822         150 :                 *allField = LinearGradient_Def2All[inField];
   30823         150 :                 return GF_OK;
   30824             :         case GF_SG_FIELD_CODING_OUT:
   30825           0 :                 *allField = LinearGradient_Out2All[inField];
   30826           0 :                 return GF_OK;
   30827             :         case GF_SG_FIELD_CODING_DYN:
   30828           0 :                 *allField = LinearGradient_Dyn2All[inField];
   30829           0 :                 return GF_OK;
   30830             :         default:
   30831           0 :                 return GF_BAD_PARAM;
   30832             :         }
   30833         291 : }
   30834             : static GF_Err LinearGradient_get_field(GF_Node *node, GF_FieldInfo *info)
   30835             : {
   30836        2350 :         switch (info->fieldIndex) {
   30837             :         case 0:
   30838         220 :                 info->name = "endPoint";
   30839         220 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30840         220 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   30841         220 :                 info->far_ptr = & ((M_LinearGradient *) node)->endPoint;
   30842         220 :                 return GF_OK;
   30843             :         case 1:
   30844         216 :                 info->name = "key";
   30845         216 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30846         216 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   30847         216 :                 info->far_ptr = & ((M_LinearGradient *) node)->key;
   30848         216 :                 return GF_OK;
   30849             :         case 2:
   30850         218 :                 info->name = "keyValue";
   30851         218 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30852         218 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   30853         218 :                 info->far_ptr = & ((M_LinearGradient *) node)->keyValue;
   30854         218 :                 return GF_OK;
   30855             :         case 3:
   30856         106 :                 info->name = "opacity";
   30857         106 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30858         106 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   30859         106 :                 info->far_ptr = & ((M_LinearGradient *) node)->opacity;
   30860         106 :                 return GF_OK;
   30861             :         case 4:
   30862         241 :                 info->name = "spreadMethod";
   30863         241 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30864         241 :                 info->fieldType = GF_SG_VRML_SFINT32;
   30865         241 :                 info->far_ptr = & ((M_LinearGradient *) node)->spreadMethod;
   30866         241 :                 return GF_OK;
   30867             :         case 5:
   30868         121 :                 info->name = "startPoint";
   30869         121 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30870         121 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   30871         121 :                 info->far_ptr = & ((M_LinearGradient *) node)->startPoint;
   30872         121 :                 return GF_OK;
   30873             :         case 6:
   30874          53 :                 info->name = "transform";
   30875          53 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30876          53 :                 info->fieldType = GF_SG_VRML_SFNODE;
   30877          53 :                 info->NDTtype = NDT_SF3DNode;
   30878          53 :                 info->far_ptr = & ((M_LinearGradient *)node)->transform;
   30879          53 :                 return GF_OK;
   30880             :         default:
   30881           0 :                 return GF_BAD_PARAM;
   30882             :         }
   30883        1175 : }
   30884             : 
   30885             : 
   30886             : static s32 LinearGradient_get_field_index_by_name(char *name)
   30887             : {
   30888         408 :         if (!strcmp("endPoint", name)) return 0;
   30889         177 :         if (!strcmp("key", name)) return 1;
   30890         134 :         if (!strcmp("keyValue", name)) return 2;
   30891          40 :         if (!strcmp("opacity", name)) return 3;
   30892          76 :         if (!strcmp("spreadMethod", name)) return 4;
   30893           8 :         if (!strcmp("startPoint", name)) return 5;
   30894           0 :         if (!strcmp("transform", name)) return 6;
   30895           0 :         return -1;
   30896         180 : }
   30897             : static Bool LinearGradient_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30898             : {
   30899           0 :         switch (FieldIndex) {
   30900             :         case 0:
   30901           0 :                 *AType = 2;
   30902           0 :                 *QType = 5;
   30903           0 :                 *b_min = FIX_MIN;
   30904           0 :                 *b_max = FIX_MAX;
   30905           0 :                 return 1;
   30906             :         case 1:
   30907           0 :                 *AType = 0;
   30908           0 :                 *QType = 8;
   30909           0 :                 *b_min = FLT2FIX(0);
   30910           0 :                 *b_max = FLT2FIX(1);
   30911           0 :                 return 1;
   30912             :         case 2:
   30913           0 :                 *AType = 0;
   30914           0 :                 *QType = 4;
   30915           0 :                 *b_min = FLT2FIX(0);
   30916           0 :                 *b_max = FLT2FIX(1);
   30917           0 :                 return 1;
   30918             :         case 3:
   30919           0 :                 *AType = 0;
   30920           0 :                 *QType = 7;
   30921           0 :                 *b_min = FLT2FIX(0);
   30922           0 :                 *b_max = FLT2FIX(1);
   30923           0 :                 return 1;
   30924             :         case 4:
   30925           0 :                 *AType = 0;
   30926           0 :                 *QType = 13;
   30927           0 :                 *QT13_bits = 2;
   30928           0 :                 *b_min = FLT2FIX(0);
   30929           0 :                 *b_max = FLT2FIX(2);
   30930           0 :                 return 1;
   30931             :         case 5:
   30932           0 :                 *AType = 2;
   30933           0 :                 *QType = 5;
   30934           0 :                 *b_min = FIX_MIN;
   30935           0 :                 *b_max = FIX_MAX;
   30936           0 :                 return 1;
   30937             :         default:
   30938           0 :                 return 0;
   30939             :         }
   30940           0 : }
   30941             : 
   30942             : 
   30943             : 
   30944             : GF_Node *LinearGradient_Create()
   30945             : {
   30946             :         M_LinearGradient *p;
   30947         330 :         GF_SAFEALLOC(p, M_LinearGradient);
   30948         110 :         if(!p) return NULL;
   30949         110 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_LinearGradient);
   30950             : 
   30951             :         /*default field values*/
   30952         110 :         p->endPoint.x = FLT2FIX(1);
   30953         110 :         p->endPoint.y = FLT2FIX(0);
   30954         110 :         p->opacity.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   30955         110 :         p->opacity.count = 1;
   30956         110 :         p->opacity.vals[0] = FLT2FIX(1);
   30957         110 :         p->spreadMethod = 0;
   30958         110 :         p->startPoint.x = FLT2FIX(0);
   30959         110 :         p->startPoint.y = FLT2FIX(0);
   30960         110 :         return (GF_Node *)p;
   30961         110 : }
   30962             : 
   30963             : 
   30964             : /*
   30965             :         PathLayout Node deletion
   30966             : */
   30967             : 
   30968             : static void PathLayout_Del(GF_Node *node)
   30969             : {
   30970          72 :         M_PathLayout *p = (M_PathLayout *) node;
   30971          36 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   30972          36 :         gf_sg_mfint32_del(p->alignment);
   30973          36 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   30974          36 :         gf_node_free((GF_Node *) p);
   30975          36 : }
   30976             : 
   30977             : static const u16 PathLayout_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9};
   30978             : static const u16 PathLayout_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   30979             : static const u16 PathLayout_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9};
   30980             : static const u16 PathLayout_Dyn2All[] = { 5, 6};
   30981             : 
   30982             : static u32 PathLayout_get_field_count(GF_Node *node, u8 IndexMode)
   30983             : {
   30984         244 :         switch(IndexMode) {
   30985             :         case GF_SG_FIELD_CODING_IN:
   30986          90 :                 return 10;
   30987             :         case GF_SG_FIELD_CODING_DEF:
   30988          18 :                 return 8;
   30989             :         case GF_SG_FIELD_CODING_OUT:
   30990           0 :                 return 8;
   30991             :         case GF_SG_FIELD_CODING_DYN:
   30992           0 :                 return 2;
   30993             :         default:
   30994          14 :                 return 10;
   30995             :         }
   30996         122 : }
   30997             : 
   30998             : static GF_Err PathLayout_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30999             : {
   31000         580 :         switch(IndexMode) {
   31001             :         case GF_SG_FIELD_CODING_IN:
   31002         218 :                 *allField = PathLayout_In2All[inField];
   31003         218 :                 return GF_OK;
   31004             :         case GF_SG_FIELD_CODING_DEF:
   31005          72 :                 *allField = PathLayout_Def2All[inField];
   31006          72 :                 return GF_OK;
   31007             :         case GF_SG_FIELD_CODING_OUT:
   31008           0 :                 *allField = PathLayout_Out2All[inField];
   31009           0 :                 return GF_OK;
   31010             :         case GF_SG_FIELD_CODING_DYN:
   31011           0 :                 *allField = PathLayout_Dyn2All[inField];
   31012           0 :                 return GF_OK;
   31013             :         default:
   31014           0 :                 return GF_BAD_PARAM;
   31015             :         }
   31016         290 : }
   31017             : static GF_Err PathLayout_get_field(GF_Node *node, GF_FieldInfo *info)
   31018             : {
   31019        1072 :         switch (info->fieldIndex) {
   31020             :         case 0:
   31021          14 :                 info->name = "addChildren";
   31022          14 :                 info->eventType = GF_SG_EVENT_IN;
   31023          14 :                 info->on_event_in = ((M_PathLayout *)node)->on_addChildren;
   31024          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31025          14 :                 info->NDTtype = NDT_SF2DNode;
   31026          14 :                 info->far_ptr = & ((M_PathLayout *)node)->addChildren;
   31027          14 :                 return GF_OK;
   31028             :         case 1:
   31029          14 :                 info->name = "removeChildren";
   31030          14 :                 info->eventType = GF_SG_EVENT_IN;
   31031          14 :                 info->on_event_in = ((M_PathLayout *)node)->on_removeChildren;
   31032          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31033          14 :                 info->NDTtype = NDT_SF2DNode;
   31034          14 :                 info->far_ptr = & ((M_PathLayout *)node)->removeChildren;
   31035          14 :                 return GF_OK;
   31036             :         case 2:
   31037          48 :                 info->name = "children";
   31038          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31039          48 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31040          48 :                 info->NDTtype = NDT_SF2DNode;
   31041          48 :                 info->far_ptr = & ((M_PathLayout *)node)->children;
   31042          48 :                 return GF_OK;
   31043             :         case 3:
   31044          48 :                 info->name = "geometry";
   31045          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31046          48 :                 info->fieldType = GF_SG_VRML_SFNODE;
   31047          48 :                 info->NDTtype = NDT_SFGeometryNode;
   31048          48 :                 info->far_ptr = & ((M_PathLayout *)node)->geometry;
   31049          48 :                 return GF_OK;
   31050             :         case 4:
   31051          66 :                 info->name = "alignment";
   31052          66 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31053          66 :                 info->fieldType = GF_SG_VRML_MFINT32;
   31054          66 :                 info->far_ptr = & ((M_PathLayout *) node)->alignment;
   31055          66 :                 return GF_OK;
   31056             :         case 5:
   31057          82 :                 info->name = "pathOffset";
   31058          82 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31059          82 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31060          82 :                 info->far_ptr = & ((M_PathLayout *) node)->pathOffset;
   31061          82 :                 return GF_OK;
   31062             :         case 6:
   31063          36 :                 info->name = "spacing";
   31064          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31065          36 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31066          36 :                 info->far_ptr = & ((M_PathLayout *) node)->spacing;
   31067          36 :                 return GF_OK;
   31068             :         case 7:
   31069          36 :                 info->name = "reverseLayout";
   31070          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31071          36 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31072          36 :                 info->far_ptr = & ((M_PathLayout *) node)->reverseLayout;
   31073          36 :                 return GF_OK;
   31074             :         case 8:
   31075         156 :                 info->name = "wrapMode";
   31076         156 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31077         156 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31078         156 :                 info->far_ptr = & ((M_PathLayout *) node)->wrapMode;
   31079         156 :                 return GF_OK;
   31080             :         case 9:
   31081          36 :                 info->name = "splitText";
   31082          36 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31083          36 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31084          36 :                 info->far_ptr = & ((M_PathLayout *) node)->splitText;
   31085          36 :                 return GF_OK;
   31086             :         default:
   31087           0 :                 return GF_BAD_PARAM;
   31088             :         }
   31089         536 : }
   31090             : 
   31091             : 
   31092             : static s32 PathLayout_get_field_index_by_name(char *name)
   31093             : {
   31094         144 :         if (!strcmp("addChildren", name)) return 0;
   31095          72 :         if (!strcmp("removeChildren", name)) return 1;
   31096          80 :         if (!strcmp("children", name)) return 2;
   31097          72 :         if (!strcmp("geometry", name)) return 3;
   31098          64 :         if (!strcmp("alignment", name)) return 4;
   31099          64 :         if (!strcmp("pathOffset", name)) return 5;
   31100          32 :         if (!strcmp("spacing", name)) return 6;
   31101          32 :         if (!strcmp("reverseLayout", name)) return 7;
   31102          64 :         if (!strcmp("wrapMode", name)) return 8;
   31103           0 :         if (!strcmp("splitText", name)) return 9;
   31104           0 :         return -1;
   31105          72 : }
   31106             : static Bool PathLayout_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31107             : {
   31108           0 :         switch (FieldIndex) {
   31109             :         case 4:
   31110           0 :                 *AType = 0;
   31111           0 :                 *QType = 13;
   31112           0 :                 *QT13_bits = 2;
   31113           0 :                 *b_min = FLT2FIX(-1);
   31114           0 :                 *b_max = FLT2FIX(1);
   31115           0 :                 return 1;
   31116             :         case 5:
   31117           0 :                 *AType = 7;
   31118           0 :                 *QType = 7;
   31119           0 :                 *b_min = FIX_MIN;
   31120           0 :                 *b_max = FIX_MAX;
   31121           0 :                 return 1;
   31122             :         case 6:
   31123           0 :                 *AType = 7;
   31124           0 :                 *QType = 7;
   31125           0 :                 *b_min = FIX_MIN;
   31126           0 :                 *b_max = FIX_MAX;
   31127           0 :                 return 1;
   31128             :         case 8:
   31129           0 :                 *AType = 0;
   31130           0 :                 *QType = 13;
   31131           0 :                 *QT13_bits = 2;
   31132           0 :                 *b_min = FLT2FIX(0);
   31133           0 :                 *b_max = FLT2FIX(2);
   31134           0 :                 return 1;
   31135             :         default:
   31136           0 :                 return 0;
   31137             :         }
   31138           0 : }
   31139             : 
   31140             : 
   31141             : 
   31142             : GF_Node *PathLayout_Create()
   31143             : {
   31144             :         M_PathLayout *p;
   31145         108 :         GF_SAFEALLOC(p, M_PathLayout);
   31146          36 :         if(!p) return NULL;
   31147          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PathLayout);
   31148          36 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   31149             : 
   31150             :         /*default field values*/
   31151          36 :         p->alignment.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   31152          36 :         p->alignment.count = 1;
   31153          36 :         p->alignment.vals[0] = 0;
   31154          36 :         p->pathOffset = FLT2FIX(0);
   31155          36 :         p->spacing = FLT2FIX(1.0);
   31156          36 :         p->wrapMode = 0;
   31157          36 :         p->splitText = 1;
   31158          36 :         return (GF_Node *)p;
   31159          36 : }
   31160             : 
   31161             : 
   31162             : /*
   31163             :         RadialGradient Node deletion
   31164             : */
   31165             : 
   31166             : static void RadialGradient_Del(GF_Node *node)
   31167             : {
   31168         288 :         M_RadialGradient *p = (M_RadialGradient *) node;
   31169         144 :         gf_sg_mffloat_del(p->key);
   31170         144 :         gf_sg_mfcolor_del(p->keyValue);
   31171         144 :         gf_sg_mffloat_del(p->opacity);
   31172         144 :         gf_node_unregister((GF_Node *) p->transform, (GF_Node *) p);
   31173         144 :         gf_node_free((GF_Node *) p);
   31174         144 : }
   31175             : 
   31176             : static const u16 RadialGradient_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   31177             : static const u16 RadialGradient_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   31178             : static const u16 RadialGradient_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   31179             : static const u16 RadialGradient_Dyn2All[] = { 0, 1, 5};
   31180             : 
   31181             : static u32 RadialGradient_get_field_count(GF_Node *node, u8 IndexMode)
   31182             : {
   31183         458 :         switch(IndexMode) {
   31184             :         case GF_SG_FIELD_CODING_IN:
   31185          99 :                 return 8;
   31186             :         case GF_SG_FIELD_CODING_DEF:
   31187          65 :                 return 8;
   31188             :         case GF_SG_FIELD_CODING_OUT:
   31189           0 :                 return 8;
   31190             :         case GF_SG_FIELD_CODING_DYN:
   31191           0 :                 return 3;
   31192             :         default:
   31193          65 :                 return 8;
   31194             :         }
   31195         229 : }
   31196             : 
   31197             : static GF_Err RadialGradient_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31198             : {
   31199         872 :         switch(IndexMode) {
   31200             :         case GF_SG_FIELD_CODING_IN:
   31201         179 :                 *allField = RadialGradient_In2All[inField];
   31202         179 :                 return GF_OK;
   31203             :         case GF_SG_FIELD_CODING_DEF:
   31204         257 :                 *allField = RadialGradient_Def2All[inField];
   31205         257 :                 return GF_OK;
   31206             :         case GF_SG_FIELD_CODING_OUT:
   31207           0 :                 *allField = RadialGradient_Out2All[inField];
   31208           0 :                 return GF_OK;
   31209             :         case GF_SG_FIELD_CODING_DYN:
   31210           0 :                 *allField = RadialGradient_Dyn2All[inField];
   31211           0 :                 return GF_OK;
   31212             :         default:
   31213           0 :                 return GF_BAD_PARAM;
   31214             :         }
   31215         436 : }
   31216             : static GF_Err RadialGradient_get_field(GF_Node *node, GF_FieldInfo *info)
   31217             : {
   31218        3412 :         switch (info->fieldIndex) {
   31219             :         case 0:
   31220         161 :                 info->name = "center";
   31221         161 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31222         161 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   31223         161 :                 info->far_ptr = & ((M_RadialGradient *) node)->center;
   31224         161 :                 return GF_OK;
   31225             :         case 1:
   31226         288 :                 info->name = "focalPoint";
   31227         288 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31228         288 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   31229         288 :                 info->far_ptr = & ((M_RadialGradient *) node)->focalPoint;
   31230         288 :                 return GF_OK;
   31231             :         case 2:
   31232         264 :                 info->name = "key";
   31233         264 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31234         264 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   31235         264 :                 info->far_ptr = & ((M_RadialGradient *) node)->key;
   31236         264 :                 return GF_OK;
   31237             :         case 3:
   31238         264 :                 info->name = "keyValue";
   31239         264 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31240         264 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   31241         264 :                 info->far_ptr = & ((M_RadialGradient *) node)->keyValue;
   31242         264 :                 return GF_OK;
   31243             :         case 4:
   31244         174 :                 info->name = "opacity";
   31245         174 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31246         174 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   31247         174 :                 info->far_ptr = & ((M_RadialGradient *) node)->opacity;
   31248         174 :                 return GF_OK;
   31249             :         case 5:
   31250         204 :                 info->name = "radius";
   31251         204 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31252         204 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31253         204 :                 info->far_ptr = & ((M_RadialGradient *) node)->radius;
   31254         204 :                 return GF_OK;
   31255             :         case 6:
   31256         279 :                 info->name = "spreadMethod";
   31257         279 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31258         279 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31259         279 :                 info->far_ptr = & ((M_RadialGradient *) node)->spreadMethod;
   31260         279 :                 return GF_OK;
   31261             :         case 7:
   31262          72 :                 info->name = "transform";
   31263          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31264          72 :                 info->fieldType = GF_SG_VRML_SFNODE;
   31265          72 :                 info->NDTtype = NDT_SF3DNode;
   31266          72 :                 info->far_ptr = & ((M_RadialGradient *)node)->transform;
   31267          72 :                 return GF_OK;
   31268             :         default:
   31269           0 :                 return GF_BAD_PARAM;
   31270             :         }
   31271        1706 : }
   31272             : 
   31273             : 
   31274             : static s32 RadialGradient_get_field_index_by_name(char *name)
   31275             : {
   31276         354 :         if (!strcmp("center", name)) return 0;
   31277         212 :         if (!strcmp("focalPoint", name)) return 1;
   31278         156 :         if (!strcmp("key", name)) return 2;
   31279         124 :         if (!strcmp("keyValue", name)) return 3;
   31280          68 :         if (!strcmp("opacity", name)) return 4;
   31281          68 :         if (!strcmp("radius", name)) return 5;
   31282          72 :         if (!strcmp("spreadMethod", name)) return 6;
   31283           0 :         if (!strcmp("transform", name)) return 7;
   31284           0 :         return -1;
   31285         174 : }
   31286             : static Bool RadialGradient_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31287             : {
   31288           0 :         switch (FieldIndex) {
   31289             :         case 0:
   31290           0 :                 *AType = 2;
   31291           0 :                 *QType = 5;
   31292           0 :                 *b_min = FIX_MIN;
   31293           0 :                 *b_max = FIX_MAX;
   31294           0 :                 return 1;
   31295             :         case 1:
   31296           0 :                 *AType = 2;
   31297           0 :                 *QType = 5;
   31298           0 :                 *b_min = FIX_MIN;
   31299           0 :                 *b_max = FIX_MAX;
   31300           0 :                 return 1;
   31301             :         case 2:
   31302           0 :                 *AType = 0;
   31303           0 :                 *QType = 8;
   31304           0 :                 *b_min = FLT2FIX(0);
   31305           0 :                 *b_max = FLT2FIX(1);
   31306           0 :                 return 1;
   31307             :         case 3:
   31308           0 :                 *AType = 0;
   31309           0 :                 *QType = 4;
   31310           0 :                 *b_min = FLT2FIX(0);
   31311           0 :                 *b_max = FLT2FIX(1);
   31312           0 :                 return 1;
   31313             :         case 4:
   31314           0 :                 *AType = 0;
   31315           0 :                 *QType = 7;
   31316           0 :                 *b_min = FLT2FIX(0);
   31317           0 :                 *b_max = FLT2FIX(1);
   31318           0 :                 return 1;
   31319             :         case 5:
   31320           0 :                 *AType = 7;
   31321           0 :                 *QType = 12;
   31322           0 :                 *b_min = FLT2FIX(0);
   31323           0 :                 *b_max = FIX_MAX;
   31324           0 :                 return 1;
   31325             :         case 6:
   31326           0 :                 *AType = 0;
   31327           0 :                 *QType = 13;
   31328           0 :                 *QT13_bits = 2;
   31329           0 :                 *b_min = FLT2FIX(0);
   31330           0 :                 *b_max = FLT2FIX(2);
   31331           0 :                 return 1;
   31332             :         default:
   31333           0 :                 return 0;
   31334             :         }
   31335           0 : }
   31336             : 
   31337             : 
   31338             : 
   31339             : GF_Node *RadialGradient_Create()
   31340             : {
   31341             :         M_RadialGradient *p;
   31342         432 :         GF_SAFEALLOC(p, M_RadialGradient);
   31343         144 :         if(!p) return NULL;
   31344         144 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_RadialGradient);
   31345             : 
   31346             :         /*default field values*/
   31347         144 :         p->center.x = FLT2FIX(0.5);
   31348         144 :         p->center.y = FLT2FIX(0.5);
   31349         144 :         p->focalPoint.x = FLT2FIX(0);
   31350         144 :         p->focalPoint.y = FLT2FIX(0);
   31351         144 :         p->opacity.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   31352         144 :         p->opacity.count = 1;
   31353         144 :         p->opacity.vals[0] = FLT2FIX(1);
   31354         144 :         p->radius = FLT2FIX(0.5);
   31355         144 :         p->spreadMethod = 0;
   31356         144 :         return (GF_Node *)p;
   31357         144 : }
   31358             : 
   31359             : 
   31360             : /*
   31361             :         SynthesizedTexture Node deletion
   31362             : */
   31363             : 
   31364             : static void SynthesizedTexture_Del(GF_Node *node)
   31365             : {
   31366           0 :         M_SynthesizedTexture *p = (M_SynthesizedTexture *) node;
   31367           0 :         gf_sg_mfvec3f_del(p->translation);
   31368           0 :         gf_sg_mfrotation_del(p->rotation);
   31369           0 :         gf_sg_mfurl_del(p->url);
   31370           0 :         gf_node_free((GF_Node *) p);
   31371           0 : }
   31372             : 
   31373             : static const u16 SynthesizedTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   31374             : static const u16 SynthesizedTexture_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   31375             : static const u16 SynthesizedTexture_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   31376             : static const u16 SynthesizedTexture_Dyn2All[] = { 0, 1, 5};
   31377             : 
   31378             : static u32 SynthesizedTexture_get_field_count(GF_Node *node, u8 IndexMode)
   31379             : {
   31380           0 :         switch(IndexMode) {
   31381             :         case GF_SG_FIELD_CODING_IN:
   31382           0 :                 return 9;
   31383             :         case GF_SG_FIELD_CODING_DEF:
   31384           0 :                 return 9;
   31385             :         case GF_SG_FIELD_CODING_OUT:
   31386           0 :                 return 11;
   31387             :         case GF_SG_FIELD_CODING_DYN:
   31388           0 :                 return 3;
   31389             :         default:
   31390           0 :                 return 11;
   31391             :         }
   31392           0 : }
   31393             : 
   31394             : static GF_Err SynthesizedTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31395             : {
   31396           0 :         switch(IndexMode) {
   31397             :         case GF_SG_FIELD_CODING_IN:
   31398           0 :                 *allField = SynthesizedTexture_In2All[inField];
   31399           0 :                 return GF_OK;
   31400             :         case GF_SG_FIELD_CODING_DEF:
   31401           0 :                 *allField = SynthesizedTexture_Def2All[inField];
   31402           0 :                 return GF_OK;
   31403             :         case GF_SG_FIELD_CODING_OUT:
   31404           0 :                 *allField = SynthesizedTexture_Out2All[inField];
   31405           0 :                 return GF_OK;
   31406             :         case GF_SG_FIELD_CODING_DYN:
   31407           0 :                 *allField = SynthesizedTexture_Dyn2All[inField];
   31408           0 :                 return GF_OK;
   31409             :         default:
   31410           0 :                 return GF_BAD_PARAM;
   31411             :         }
   31412           0 : }
   31413             : static GF_Err SynthesizedTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   31414             : {
   31415           0 :         switch (info->fieldIndex) {
   31416             :         case 0:
   31417           0 :                 info->name = "translation";
   31418           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31419           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   31420           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->translation;
   31421           0 :                 return GF_OK;
   31422             :         case 1:
   31423           0 :                 info->name = "rotation";
   31424           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31425           0 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   31426           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->rotation;
   31427           0 :                 return GF_OK;
   31428             :         case 2:
   31429           0 :                 info->name = "pixelWidth";
   31430           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31431           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31432           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->pixelWidth;
   31433           0 :                 return GF_OK;
   31434             :         case 3:
   31435           0 :                 info->name = "pixelHeight";
   31436           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31437           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31438           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->pixelHeight;
   31439           0 :                 return GF_OK;
   31440             :         case 4:
   31441           0 :                 info->name = "loop";
   31442           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31443           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31444           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->loop;
   31445           0 :                 return GF_OK;
   31446             :         case 5:
   31447           0 :                 info->name = "speed";
   31448           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31449           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31450           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->speed;
   31451           0 :                 return GF_OK;
   31452             :         case 6:
   31453           0 :                 info->name = "startTime";
   31454           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31455           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   31456           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->startTime;
   31457           0 :                 return GF_OK;
   31458             :         case 7:
   31459           0 :                 info->name = "stopTime";
   31460           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31461           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   31462           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->stopTime;
   31463           0 :                 return GF_OK;
   31464             :         case 8:
   31465           0 :                 info->name = "url";
   31466           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31467           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   31468           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->url;
   31469           0 :                 return GF_OK;
   31470             :         case 9:
   31471           0 :                 info->name = "duration_changed";
   31472           0 :                 info->eventType = GF_SG_EVENT_OUT;
   31473           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   31474           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->duration_changed;
   31475           0 :                 return GF_OK;
   31476             :         case 10:
   31477           0 :                 info->name = "isActive";
   31478           0 :                 info->eventType = GF_SG_EVENT_OUT;
   31479           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31480           0 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->isActive;
   31481           0 :                 return GF_OK;
   31482             :         default:
   31483           0 :                 return GF_BAD_PARAM;
   31484             :         }
   31485           0 : }
   31486             : 
   31487             : 
   31488             : static s32 SynthesizedTexture_get_field_index_by_name(char *name)
   31489             : {
   31490           0 :         if (!strcmp("translation", name)) return 0;
   31491           0 :         if (!strcmp("rotation", name)) return 1;
   31492           0 :         if (!strcmp("pixelWidth", name)) return 2;
   31493           0 :         if (!strcmp("pixelHeight", name)) return 3;
   31494           0 :         if (!strcmp("loop", name)) return 4;
   31495           0 :         if (!strcmp("speed", name)) return 5;
   31496           0 :         if (!strcmp("startTime", name)) return 6;
   31497           0 :         if (!strcmp("stopTime", name)) return 7;
   31498           0 :         if (!strcmp("url", name)) return 8;
   31499           0 :         if (!strcmp("duration_changed", name)) return 9;
   31500           0 :         if (!strcmp("isActive", name)) return 10;
   31501           0 :         return -1;
   31502           0 : }
   31503             : static Bool SynthesizedTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31504             : {
   31505           0 :         switch (FieldIndex) {
   31506             :         case 0:
   31507           0 :                 *AType = 1;
   31508           0 :                 *QType = 1;
   31509           0 :                 *b_min = FIX_MIN;
   31510           0 :                 *b_max = FIX_MAX;
   31511           0 :                 return 1;
   31512             :         case 1:
   31513           0 :                 *AType = 10;
   31514           0 :                 *QType = 10;
   31515           0 :                 *b_min = FIX_MIN;
   31516           0 :                 *b_max = FIX_MAX;
   31517           0 :                 return 1;
   31518             :         case 2:
   31519           0 :                 *AType = 0;
   31520           0 :                 *QType = 13;
   31521           0 :                 *QT13_bits = 16;
   31522           0 :                 *b_min = FLT2FIX(0);
   31523           0 :                 *b_max = FIX_MAX;
   31524           0 :                 return 1;
   31525             :         case 3:
   31526           0 :                 *AType = 0;
   31527           0 :                 *QType = 13;
   31528           0 :                 *QT13_bits = 16;
   31529           0 :                 *b_min = FLT2FIX(0);
   31530           0 :                 *b_max = FIX_MAX;
   31531           0 :                 return 1;
   31532             :         case 5:
   31533           0 :                 *AType = 7;
   31534           0 :                 *QType = 0;
   31535           0 :                 *b_min = FIX_MIN;
   31536           0 :                 *b_max = FIX_MAX;
   31537           0 :                 return 1;
   31538             :         default:
   31539           0 :                 return 0;
   31540             :         }
   31541           0 : }
   31542             : 
   31543             : 
   31544             : 
   31545             : GF_Node *SynthesizedTexture_Create()
   31546             : {
   31547             :         M_SynthesizedTexture *p;
   31548           0 :         GF_SAFEALLOC(p, M_SynthesizedTexture);
   31549           0 :         if(!p) return NULL;
   31550           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SynthesizedTexture);
   31551             : 
   31552             :         /*default field values*/
   31553           0 :         p->pixelWidth = -1;
   31554           0 :         p->pixelHeight = -1;
   31555           0 :         p->speed = FLT2FIX(1.0);
   31556           0 :         p->startTime = 0;
   31557           0 :         p->stopTime = 0;
   31558           0 :         return (GF_Node *)p;
   31559           0 : }
   31560             : 
   31561             : 
   31562             : /*
   31563             :         TransformMatrix2D Node deletion
   31564             : */
   31565             : 
   31566             : static void TransformMatrix2D_Del(GF_Node *node)
   31567             : {
   31568        3932 :         M_TransformMatrix2D *p = (M_TransformMatrix2D *) node;
   31569        1966 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   31570        1966 :         gf_node_free((GF_Node *) p);
   31571        1966 : }
   31572             : 
   31573             : static const u16 TransformMatrix2D_Def2All[] = { 2, 3, 4, 5, 6, 7, 8};
   31574             : static const u16 TransformMatrix2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   31575             : static const u16 TransformMatrix2D_Out2All[] = { 2, 3, 4, 5, 6, 7, 8};
   31576             : static const u16 TransformMatrix2D_Dyn2All[] = { 3, 4, 5, 6, 7, 8};
   31577             : 
   31578             : static u32 TransformMatrix2D_get_field_count(GF_Node *node, u8 IndexMode)
   31579             : {
   31580        4138 :         switch(IndexMode) {
   31581             :         case GF_SG_FIELD_CODING_IN:
   31582         135 :                 return 9;
   31583             :         case GF_SG_FIELD_CODING_DEF:
   31584        1822 :                 return 7;
   31585             :         case GF_SG_FIELD_CODING_OUT:
   31586           0 :                 return 7;
   31587             :         case GF_SG_FIELD_CODING_DYN:
   31588           0 :                 return 6;
   31589             :         default:
   31590         112 :                 return 9;
   31591             :         }
   31592        2069 : }
   31593             : 
   31594             : static GF_Err TransformMatrix2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31595             : {
   31596       13092 :         switch(IndexMode) {
   31597             :         case GF_SG_FIELD_CODING_IN:
   31598         259 :                 *allField = TransformMatrix2D_In2All[inField];
   31599         259 :                 return GF_OK;
   31600             :         case GF_SG_FIELD_CODING_DEF:
   31601        6287 :                 *allField = TransformMatrix2D_Def2All[inField];
   31602        6287 :                 return GF_OK;
   31603             :         case GF_SG_FIELD_CODING_OUT:
   31604           0 :                 *allField = TransformMatrix2D_Out2All[inField];
   31605           0 :                 return GF_OK;
   31606             :         case GF_SG_FIELD_CODING_DYN:
   31607           0 :                 *allField = TransformMatrix2D_Dyn2All[inField];
   31608           0 :                 return GF_OK;
   31609             :         default:
   31610           0 :                 return GF_BAD_PARAM;
   31611             :         }
   31612        6546 : }
   31613             : static GF_Err TransformMatrix2D_get_field(GF_Node *node, GF_FieldInfo *info)
   31614             : {
   31615       37152 :         switch (info->fieldIndex) {
   31616             :         case 0:
   31617         112 :                 info->name = "addChildren";
   31618         112 :                 info->eventType = GF_SG_EVENT_IN;
   31619         112 :                 info->on_event_in = ((M_TransformMatrix2D *)node)->on_addChildren;
   31620         112 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31621         112 :                 info->NDTtype = NDT_SF2DNode;
   31622         112 :                 info->far_ptr = & ((M_TransformMatrix2D *)node)->addChildren;
   31623         112 :                 return GF_OK;
   31624             :         case 1:
   31625         112 :                 info->name = "removeChildren";
   31626         112 :                 info->eventType = GF_SG_EVENT_IN;
   31627         112 :                 info->on_event_in = ((M_TransformMatrix2D *)node)->on_removeChildren;
   31628         112 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31629         112 :                 info->NDTtype = NDT_SF2DNode;
   31630         112 :                 info->far_ptr = & ((M_TransformMatrix2D *)node)->removeChildren;
   31631         112 :                 return GF_OK;
   31632             :         case 2:
   31633        1957 :                 info->name = "children";
   31634        1957 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31635        1957 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31636        1957 :                 info->NDTtype = NDT_SF2DNode;
   31637        1957 :                 info->far_ptr = & ((M_TransformMatrix2D *)node)->children;
   31638        1957 :                 return GF_OK;
   31639             :         case 3:
   31640        2872 :                 info->name = "mxx";
   31641        2872 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31642        2872 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31643        2872 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->mxx;
   31644        2872 :                 return GF_OK;
   31645             :         case 4:
   31646        2497 :                 info->name = "mxy";
   31647        2497 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31648        2497 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31649        2497 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->mxy;
   31650        2497 :                 return GF_OK;
   31651             :         case 5:
   31652        2864 :                 info->name = "tx";
   31653        2864 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31654        2864 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31655        2864 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->tx;
   31656        2864 :                 return GF_OK;
   31657             :         case 6:
   31658        2381 :                 info->name = "myx";
   31659        2381 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31660        2381 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31661        2381 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->myx;
   31662        2381 :                 return GF_OK;
   31663             :         case 7:
   31664        2887 :                 info->name = "myy";
   31665        2887 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31666        2887 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31667        2887 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->myy;
   31668        2887 :                 return GF_OK;
   31669             :         case 8:
   31670        2894 :                 info->name = "ty";
   31671        2894 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31672        2894 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31673        2894 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->ty;
   31674        2894 :                 return GF_OK;
   31675             :         default:
   31676           0 :                 return GF_BAD_PARAM;
   31677             :         }
   31678       18576 : }
   31679             : 
   31680             : 
   31681             : static s32 TransformMatrix2D_get_field_index_by_name(char *name)
   31682             : {
   31683         424 :         if (!strcmp("addChildren", name)) return 0;
   31684         212 :         if (!strcmp("removeChildren", name)) return 1;
   31685         248 :         if (!strcmp("children", name)) return 2;
   31686         200 :         if (!strcmp("mxx", name)) return 3;
   31687         204 :         if (!strcmp("mxy", name)) return 4;
   31688         120 :         if (!strcmp("tx", name)) return 5;
   31689         104 :         if (!strcmp("myx", name)) return 6;
   31690          84 :         if (!strcmp("myy", name)) return 7;
   31691          56 :         if (!strcmp("ty", name)) return 8;
   31692           0 :         return -1;
   31693         212 : }
   31694             : static Bool TransformMatrix2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31695             : {
   31696           0 :         switch (FieldIndex) {
   31697             :         case 3:
   31698           0 :                 *AType = 7;
   31699           0 :                 *QType = 7;
   31700           0 :                 *b_min = FIX_MIN;
   31701           0 :                 *b_max = FIX_MAX;
   31702           0 :                 return 1;
   31703             :         case 4:
   31704           0 :                 *AType = 7;
   31705           0 :                 *QType = 7;
   31706           0 :                 *b_min = FIX_MIN;
   31707           0 :                 *b_max = FIX_MAX;
   31708           0 :                 return 1;
   31709             :         case 5:
   31710           0 :                 *AType = 7;
   31711           0 :                 *QType = 7;
   31712           0 :                 *b_min = FIX_MIN;
   31713           0 :                 *b_max = FIX_MAX;
   31714           0 :                 return 1;
   31715             :         case 6:
   31716           0 :                 *AType = 7;
   31717           0 :                 *QType = 7;
   31718           0 :                 *b_min = FIX_MIN;
   31719           0 :                 *b_max = FIX_MAX;
   31720           0 :                 return 1;
   31721             :         case 7:
   31722           0 :                 *AType = 7;
   31723           0 :                 *QType = 7;
   31724           0 :                 *b_min = FIX_MIN;
   31725           0 :                 *b_max = FIX_MAX;
   31726           0 :                 return 1;
   31727             :         case 8:
   31728           0 :                 *AType = 7;
   31729           0 :                 *QType = 7;
   31730           0 :                 *b_min = FIX_MIN;
   31731           0 :                 *b_max = FIX_MAX;
   31732           0 :                 return 1;
   31733             :         default:
   31734           0 :                 return 0;
   31735             :         }
   31736           0 : }
   31737             : 
   31738             : 
   31739             : 
   31740             : GF_Node *TransformMatrix2D_Create()
   31741             : {
   31742             :         M_TransformMatrix2D *p;
   31743        5898 :         GF_SAFEALLOC(p, M_TransformMatrix2D);
   31744        1966 :         if(!p) return NULL;
   31745        1966 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TransformMatrix2D);
   31746        1966 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   31747             : 
   31748             :         /*default field values*/
   31749        1966 :         p->mxx = FLT2FIX(1);
   31750        1966 :         p->mxy = FLT2FIX(0);
   31751        1966 :         p->tx = FLT2FIX(0);
   31752        1966 :         p->myx = FLT2FIX(0);
   31753        1966 :         p->myy = FLT2FIX(1);
   31754        1966 :         p->ty = FLT2FIX(0);
   31755        1966 :         return (GF_Node *)p;
   31756        1966 : }
   31757             : 
   31758             : 
   31759             : /*
   31760             :         Viewport Node deletion
   31761             : */
   31762             : 
   31763             : static void Viewport_Del(GF_Node *node)
   31764             : {
   31765         622 :         M_Viewport *p = (M_Viewport *) node;
   31766         311 :         gf_sg_mfint32_del(p->alignment);
   31767         311 :         gf_sg_sfstring_del(p->description);
   31768         311 :         gf_node_free((GF_Node *) p);
   31769         311 : }
   31770             : 
   31771             : static const u16 Viewport_Def2All[] = { 1, 2, 3, 4, 5, 6};
   31772             : static const u16 Viewport_In2All[] = { 0, 1, 2, 3, 4, 5};
   31773             : static const u16 Viewport_Out2All[] = { 1, 2, 3, 4, 5, 7, 8};
   31774             : static const u16 Viewport_Dyn2All[] = { 1, 2, 3};
   31775             : 
   31776             : static u32 Viewport_get_field_count(GF_Node *node, u8 IndexMode)
   31777             : {
   31778         586 :         switch(IndexMode) {
   31779             :         case GF_SG_FIELD_CODING_IN:
   31780          18 :                 return 6;
   31781             :         case GF_SG_FIELD_CODING_DEF:
   31782         153 :                 return 6;
   31783             :         case GF_SG_FIELD_CODING_OUT:
   31784           0 :                 return 7;
   31785             :         case GF_SG_FIELD_CODING_DYN:
   31786           0 :                 return 3;
   31787             :         default:
   31788         122 :                 return 9;
   31789             :         }
   31790         293 : }
   31791             : 
   31792             : static GF_Err Viewport_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31793             : {
   31794        1046 :         switch(IndexMode) {
   31795             :         case GF_SG_FIELD_CODING_IN:
   31796          14 :                 *allField = Viewport_In2All[inField];
   31797          14 :                 return GF_OK;
   31798             :         case GF_SG_FIELD_CODING_DEF:
   31799         509 :                 *allField = Viewport_Def2All[inField];
   31800         509 :                 return GF_OK;
   31801             :         case GF_SG_FIELD_CODING_OUT:
   31802           0 :                 *allField = Viewport_Out2All[inField];
   31803           0 :                 return GF_OK;
   31804             :         case GF_SG_FIELD_CODING_DYN:
   31805           0 :                 *allField = Viewport_Dyn2All[inField];
   31806           0 :                 return GF_OK;
   31807             :         default:
   31808           0 :                 return GF_BAD_PARAM;
   31809             :         }
   31810         523 : }
   31811             : static GF_Err Viewport_get_field(GF_Node *node, GF_FieldInfo *info)
   31812             : {
   31813        6358 :         switch (info->fieldIndex) {
   31814             :         case 0:
   31815         148 :                 info->name = "set_bind";
   31816         148 :                 info->eventType = GF_SG_EVENT_IN;
   31817         148 :                 info->on_event_in = ((M_Viewport *)node)->on_set_bind;
   31818         148 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31819         148 :                 info->far_ptr = & ((M_Viewport *) node)->set_bind;
   31820         148 :                 return GF_OK;
   31821             :         case 1:
   31822         522 :                 info->name = "position";
   31823         522 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31824         522 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   31825         522 :                 info->far_ptr = & ((M_Viewport *) node)->position;
   31826         522 :                 return GF_OK;
   31827             :         case 2:
   31828         567 :                 info->name = "size";
   31829         567 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31830         567 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   31831         567 :                 info->far_ptr = & ((M_Viewport *) node)->size;
   31832         567 :                 return GF_OK;
   31833             :         case 3:
   31834         327 :                 info->name = "orientation";
   31835         327 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31836         327 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31837         327 :                 info->far_ptr = & ((M_Viewport *) node)->orientation;
   31838         327 :                 return GF_OK;
   31839             :         case 4:
   31840         507 :                 info->name = "alignment";
   31841         507 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31842         507 :                 info->fieldType = GF_SG_VRML_MFINT32;
   31843         507 :                 info->far_ptr = & ((M_Viewport *) node)->alignment;
   31844         507 :                 return GF_OK;
   31845             :         case 5:
   31846         522 :                 info->name = "fit";
   31847         522 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31848         522 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31849         522 :                 info->far_ptr = & ((M_Viewport *) node)->fit;
   31850         522 :                 return GF_OK;
   31851             :         case 6:
   31852         342 :                 info->name = "description";
   31853         342 :                 info->eventType = GF_SG_EVENT_FIELD;
   31854         342 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   31855         342 :                 info->far_ptr = & ((M_Viewport *) node)->description;
   31856         342 :                 return GF_OK;
   31857             :         case 7:
   31858         122 :                 info->name = "bindTime";
   31859         122 :                 info->eventType = GF_SG_EVENT_OUT;
   31860         122 :                 info->fieldType = GF_SG_VRML_SFTIME;
   31861         122 :                 info->far_ptr = & ((M_Viewport *) node)->bindTime;
   31862         122 :                 return GF_OK;
   31863             :         case 8:
   31864         122 :                 info->name = "isBound";
   31865         122 :                 info->eventType = GF_SG_EVENT_OUT;
   31866         122 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31867         122 :                 info->far_ptr = & ((M_Viewport *) node)->isBound;
   31868         122 :                 return GF_OK;
   31869             :         default:
   31870           0 :                 return GF_BAD_PARAM;
   31871             :         }
   31872        3179 : }
   31873             : 
   31874             : 
   31875             : static s32 Viewport_get_field_index_by_name(char *name)
   31876             : {
   31877         512 :         if (!strcmp("set_bind", name)) return 0;
   31878         300 :         if (!strcmp("position", name)) return 1;
   31879         256 :         if (!strcmp("size", name)) return 2;
   31880         124 :         if (!strcmp("orientation", name)) return 3;
   31881         168 :         if (!strcmp("alignment", name)) return 4;
   31882         120 :         if (!strcmp("fit", name)) return 5;
   31883          16 :         if (!strcmp("description", name)) return 6;
   31884           0 :         if (!strcmp("bindTime", name)) return 7;
   31885           0 :         if (!strcmp("isBound", name)) return 8;
   31886           0 :         return -1;
   31887         252 : }
   31888             : static Bool Viewport_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31889             : {
   31890           0 :         switch (FieldIndex) {
   31891             :         case 1:
   31892           0 :                 *AType = 1;
   31893           0 :                 *QType = 1;
   31894           0 :                 *b_min = FIX_MIN;
   31895           0 :                 *b_max = FIX_MAX;
   31896           0 :                 return 1;
   31897             :         case 2:
   31898           0 :                 *AType = 12;
   31899           0 :                 *QType = 12;
   31900           0 :                 *b_min = FIX_MIN;
   31901           0 :                 *b_max = FIX_MAX;
   31902           0 :                 return 1;
   31903             :         case 3:
   31904           0 :                 *AType = 6;
   31905           0 :                 *QType = 6;
   31906           0 :                 *b_min = FLT2FIX(0);
   31907           0 :                 *b_max = FLT2FIX(6.2831853);
   31908           0 :                 return 1;
   31909             :         case 4:
   31910           0 :                 *AType = 0;
   31911           0 :                 *QType = 13;
   31912           0 :                 *QT13_bits = 3;
   31913           0 :                 *b_min = FLT2FIX(-1);
   31914           0 :                 *b_max = FLT2FIX(1);
   31915           0 :                 return 1;
   31916             :         case 5:
   31917           0 :                 *AType = 0;
   31918           0 :                 *QType = 13;
   31919           0 :                 *QT13_bits = 3;
   31920           0 :                 *b_min = FLT2FIX(0);
   31921           0 :                 *b_max = FLT2FIX(2);
   31922           0 :                 return 1;
   31923             :         default:
   31924           0 :                 return 0;
   31925             :         }
   31926           0 : }
   31927             : 
   31928             : 
   31929             : 
   31930             : GF_Node *Viewport_Create()
   31931             : {
   31932             :         M_Viewport *p;
   31933         933 :         GF_SAFEALLOC(p, M_Viewport);
   31934         311 :         if(!p) return NULL;
   31935         311 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Viewport);
   31936             : 
   31937             :         /*default field values*/
   31938         311 :         p->position.x = FLT2FIX(0);
   31939         311 :         p->position.y = FLT2FIX(0);
   31940         311 :         p->size.x = FLT2FIX(-1);
   31941         311 :         p->size.y = FLT2FIX(-1);
   31942         311 :         p->orientation = FLT2FIX(0);
   31943         311 :         p->alignment.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   31944         311 :         p->alignment.count = 1;
   31945         311 :         p->alignment.vals[0] = 0;
   31946         311 :         p->fit = 0;
   31947         311 :         return (GF_Node *)p;
   31948         311 : }
   31949             : 
   31950             : 
   31951             : /*
   31952             :         XCurve2D Node deletion
   31953             : */
   31954             : 
   31955             : static void XCurve2D_Del(GF_Node *node)
   31956             : {
   31957         196 :         M_XCurve2D *p = (M_XCurve2D *) node;
   31958          98 :         gf_node_unregister((GF_Node *) p->point, (GF_Node *) p);
   31959          98 :         gf_sg_mfint32_del(p->type);
   31960          98 :         gf_node_free((GF_Node *) p);
   31961          98 : }
   31962             : 
   31963             : static const u16 XCurve2D_Def2All[] = { 0, 1, 2};
   31964             : static const u16 XCurve2D_In2All[] = { 0, 1, 2};
   31965             : static const u16 XCurve2D_Out2All[] = { 0, 1, 2};
   31966             : static const u16 XCurve2D_Dyn2All[] = { 1};
   31967             : 
   31968             : static u32 XCurve2D_get_field_count(GF_Node *node, u8 IndexMode)
   31969             : {
   31970         172 :         switch(IndexMode) {
   31971             :         case GF_SG_FIELD_CODING_IN:
   31972           0 :                 return 3;
   31973             :         case GF_SG_FIELD_CODING_DEF:
   31974          49 :                 return 3;
   31975             :         case GF_SG_FIELD_CODING_OUT:
   31976           0 :                 return 3;
   31977             :         case GF_SG_FIELD_CODING_DYN:
   31978           0 :                 return 1;
   31979             :         default:
   31980          37 :                 return 3;
   31981             :         }
   31982          86 : }
   31983             : 
   31984             : static GF_Err XCurve2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31985             : {
   31986         172 :         switch(IndexMode) {
   31987             :         case GF_SG_FIELD_CODING_IN:
   31988           0 :                 *allField = XCurve2D_In2All[inField];
   31989           0 :                 return GF_OK;
   31990             :         case GF_SG_FIELD_CODING_DEF:
   31991          86 :                 *allField = XCurve2D_Def2All[inField];
   31992          86 :                 return GF_OK;
   31993             :         case GF_SG_FIELD_CODING_OUT:
   31994           0 :                 *allField = XCurve2D_Out2All[inField];
   31995           0 :                 return GF_OK;
   31996             :         case GF_SG_FIELD_CODING_DYN:
   31997           0 :                 *allField = XCurve2D_Dyn2All[inField];
   31998           0 :                 return GF_OK;
   31999             :         default:
   32000           0 :                 return GF_BAD_PARAM;
   32001             :         }
   32002          86 : }
   32003             : static GF_Err XCurve2D_get_field(GF_Node *node, GF_FieldInfo *info)
   32004             : {
   32005         822 :         switch (info->fieldIndex) {
   32006             :         case 0:
   32007         132 :                 info->name = "point";
   32008         132 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32009         132 :                 info->fieldType = GF_SG_VRML_SFNODE;
   32010         132 :                 info->NDTtype = NDT_SFCoordinate2DNode;
   32011         132 :                 info->far_ptr = & ((M_XCurve2D *)node)->point;
   32012         132 :                 return GF_OK;
   32013             :         case 1:
   32014          98 :                 info->name = "fineness";
   32015          98 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32016          98 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32017          98 :                 info->far_ptr = & ((M_XCurve2D *) node)->fineness;
   32018          98 :                 return GF_OK;
   32019             :         case 2:
   32020         181 :                 info->name = "type";
   32021         181 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32022         181 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32023         181 :                 info->far_ptr = & ((M_XCurve2D *) node)->type;
   32024         181 :                 return GF_OK;
   32025             :         default:
   32026           0 :                 return GF_BAD_PARAM;
   32027             :         }
   32028         411 : }
   32029             : 
   32030             : 
   32031             : static s32 XCurve2D_get_field_index_by_name(char *name)
   32032             : {
   32033         120 :         if (!strcmp("point", name)) return 0;
   32034          24 :         if (!strcmp("fineness", name)) return 1;
   32035          48 :         if (!strcmp("type", name)) return 2;
   32036           0 :         return -1;
   32037          48 : }
   32038             : static Bool XCurve2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   32039             : {
   32040           0 :         switch (FieldIndex) {
   32041             :         case 1:
   32042           0 :                 *AType = 7;
   32043           0 :                 *QType = 0;
   32044           0 :                 *b_min = FLT2FIX(0);
   32045           0 :                 *b_max = FLT2FIX(1);
   32046           0 :                 return 1;
   32047             :         case 2:
   32048           0 :                 *AType = 0;
   32049           0 :                 *QType = 13;
   32050           0 :                 *QT13_bits = 4;
   32051           0 :                 *b_min = FLT2FIX(0);
   32052           0 :                 *b_max = FLT2FIX(15);
   32053           0 :                 return 1;
   32054             :         default:
   32055           0 :                 return 0;
   32056             :         }
   32057           0 : }
   32058             : 
   32059             : 
   32060             : 
   32061             : GF_Node *XCurve2D_Create()
   32062             : {
   32063             :         M_XCurve2D *p;
   32064         294 :         GF_SAFEALLOC(p, M_XCurve2D);
   32065          98 :         if(!p) return NULL;
   32066          98 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XCurve2D);
   32067             : 
   32068             :         /*default field values*/
   32069          98 :         p->fineness = FLT2FIX(0.5);
   32070          98 :         return (GF_Node *)p;
   32071          98 : }
   32072             : 
   32073             : 
   32074             : /*
   32075             :         XFontStyle Node deletion
   32076             : */
   32077             : 
   32078             : static void XFontStyle_Del(GF_Node *node)
   32079             : {
   32080           0 :         M_XFontStyle *p = (M_XFontStyle *) node;
   32081           0 :         gf_sg_mfstring_del(p->fontName);
   32082           0 :         gf_sg_mfstring_del(p->justify);
   32083           0 :         gf_sg_sfstring_del(p->language);
   32084           0 :         gf_sg_sfstring_del(p->stretch);
   32085           0 :         gf_sg_sfstring_del(p->style);
   32086           0 :         gf_sg_mfstring_del(p->featureName);
   32087           0 :         gf_sg_mfint32_del(p->featureStartOffset);
   32088           0 :         gf_sg_mfint32_del(p->featureLength);
   32089           0 :         gf_sg_mfint32_del(p->featureValue);
   32090           0 :         gf_node_free((GF_Node *) p);
   32091           0 : }
   32092             : 
   32093             : static const u16 XFontStyle_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
   32094             : static const u16 XFontStyle_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
   32095             : static const u16 XFontStyle_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
   32096             : 
   32097             : static u32 XFontStyle_get_field_count(GF_Node *node, u8 IndexMode)
   32098             : {
   32099           0 :         switch(IndexMode) {
   32100             :         case GF_SG_FIELD_CODING_IN:
   32101           0 :                 return 17;
   32102             :         case GF_SG_FIELD_CODING_DEF:
   32103           0 :                 return 17;
   32104             :         case GF_SG_FIELD_CODING_OUT:
   32105           0 :                 return 17;
   32106             :         case GF_SG_FIELD_CODING_DYN:
   32107           0 :                 return 0;
   32108             :         default:
   32109           0 :                 return 17;
   32110             :         }
   32111           0 : }
   32112             : 
   32113             : static GF_Err XFontStyle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   32114             : {
   32115           0 :         switch(IndexMode) {
   32116             :         case GF_SG_FIELD_CODING_IN:
   32117           0 :                 *allField = XFontStyle_In2All[inField];
   32118           0 :                 return GF_OK;
   32119             :         case GF_SG_FIELD_CODING_DEF:
   32120           0 :                 *allField = XFontStyle_Def2All[inField];
   32121           0 :                 return GF_OK;
   32122             :         case GF_SG_FIELD_CODING_OUT:
   32123           0 :                 *allField = XFontStyle_Out2All[inField];
   32124           0 :                 return GF_OK;
   32125             :         default:
   32126           0 :                 return GF_BAD_PARAM;
   32127             :         }
   32128           0 : }
   32129             : static GF_Err XFontStyle_get_field(GF_Node *node, GF_FieldInfo *info)
   32130             : {
   32131           0 :         switch (info->fieldIndex) {
   32132             :         case 0:
   32133           0 :                 info->name = "fontName";
   32134           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32135           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   32136           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->fontName;
   32137           0 :                 return GF_OK;
   32138             :         case 1:
   32139           0 :                 info->name = "horizontal";
   32140           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32141           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32142           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->horizontal;
   32143           0 :                 return GF_OK;
   32144             :         case 2:
   32145           0 :                 info->name = "justify";
   32146           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32147           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   32148           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->justify;
   32149           0 :                 return GF_OK;
   32150             :         case 3:
   32151           0 :                 info->name = "language";
   32152           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32153           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   32154           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->language;
   32155           0 :                 return GF_OK;
   32156             :         case 4:
   32157           0 :                 info->name = "leftToRight";
   32158           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32159           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32160           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->leftToRight;
   32161           0 :                 return GF_OK;
   32162             :         case 5:
   32163           0 :                 info->name = "size";
   32164           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32165           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32166           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->size;
   32167           0 :                 return GF_OK;
   32168             :         case 6:
   32169           0 :                 info->name = "stretch";
   32170           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32171           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   32172           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->stretch;
   32173           0 :                 return GF_OK;
   32174             :         case 7:
   32175           0 :                 info->name = "letterSpacing";
   32176           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32177           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32178           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->letterSpacing;
   32179           0 :                 return GF_OK;
   32180             :         case 8:
   32181           0 :                 info->name = "wordSpacing";
   32182           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32183           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32184           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->wordSpacing;
   32185           0 :                 return GF_OK;
   32186             :         case 9:
   32187           0 :                 info->name = "weight";
   32188           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32189           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32190           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->weight;
   32191           0 :                 return GF_OK;
   32192             :         case 10:
   32193           0 :                 info->name = "fontKerning";
   32194           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32195           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32196           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->fontKerning;
   32197           0 :                 return GF_OK;
   32198             :         case 11:
   32199           0 :                 info->name = "style";
   32200           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32201           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   32202           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->style;
   32203           0 :                 return GF_OK;
   32204             :         case 12:
   32205           0 :                 info->name = "topToBottom";
   32206           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32207           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32208           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->topToBottom;
   32209           0 :                 return GF_OK;
   32210             :         case 13:
   32211           0 :                 info->name = "featureName";
   32212           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32213           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   32214           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->featureName;
   32215           0 :                 return GF_OK;
   32216             :         case 14:
   32217           0 :                 info->name = "featureStartOffset";
   32218           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32219           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32220           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->featureStartOffset;
   32221           0 :                 return GF_OK;
   32222             :         case 15:
   32223           0 :                 info->name = "featureLength";
   32224           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32225           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32226           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->featureLength;
   32227           0 :                 return GF_OK;
   32228             :         case 16:
   32229           0 :                 info->name = "featureValue";
   32230           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32231           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32232           0 :                 info->far_ptr = & ((M_XFontStyle *) node)->featureValue;
   32233           0 :                 return GF_OK;
   32234             :         default:
   32235           0 :                 return GF_BAD_PARAM;
   32236             :         }
   32237           0 : }
   32238             : 
   32239             : 
   32240             : static s32 XFontStyle_get_field_index_by_name(char *name)
   32241             : {
   32242           0 :         if (!strcmp("fontName", name)) return 0;
   32243           0 :         if (!strcmp("horizontal", name)) return 1;
   32244           0 :         if (!strcmp("justify", name)) return 2;
   32245           0 :         if (!strcmp("language", name)) return 3;
   32246           0 :         if (!strcmp("leftToRight", name)) return 4;
   32247           0 :         if (!strcmp("size", name)) return 5;
   32248           0 :         if (!strcmp("stretch", name)) return 6;
   32249           0 :         if (!strcmp("letterSpacing", name)) return 7;
   32250           0 :         if (!strcmp("wordSpacing", name)) return 8;
   32251           0 :         if (!strcmp("weight", name)) return 9;
   32252           0 :         if (!strcmp("fontKerning", name)) return 10;
   32253           0 :         if (!strcmp("style", name)) return 11;
   32254           0 :         if (!strcmp("topToBottom", name)) return 12;
   32255           0 :         if (!strcmp("featureName", name)) return 13;
   32256           0 :         if (!strcmp("featureStartOffset", name)) return 14;
   32257           0 :         if (!strcmp("featureLength", name)) return 15;
   32258           0 :         if (!strcmp("featureValue", name)) return 16;
   32259           0 :         return -1;
   32260           0 : }
   32261             : static Bool XFontStyle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   32262             : {
   32263           0 :         switch (FieldIndex) {
   32264             :         case 5:
   32265           0 :                 *AType = 0;
   32266           0 :                 *QType = 11;
   32267           0 :                 *b_min = FLT2FIX(0);
   32268           0 :                 *b_max = FIX_MAX;
   32269           0 :                 return 1;
   32270             :         case 7:
   32271           0 :                 *AType = 0;
   32272           0 :                 *QType = 11;
   32273           0 :                 *b_min = FLT2FIX(0);
   32274           0 :                 *b_max = FIX_MAX;
   32275           0 :                 return 1;
   32276             :         case 8:
   32277           0 :                 *AType = 0;
   32278           0 :                 *QType = 11;
   32279           0 :                 *b_min = FLT2FIX(0);
   32280           0 :                 *b_max = FIX_MAX;
   32281           0 :                 return 1;
   32282             :         default:
   32283           0 :                 return 0;
   32284             :         }
   32285           0 : }
   32286             : 
   32287             : 
   32288             : 
   32289             : GF_Node *XFontStyle_Create()
   32290             : {
   32291             :         M_XFontStyle *p;
   32292           0 :         GF_SAFEALLOC(p, M_XFontStyle);
   32293           0 :         if(!p) return NULL;
   32294           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XFontStyle);
   32295             : 
   32296             :         /*default field values*/
   32297           0 :         p->fontName.vals = (char**)gf_malloc(sizeof(SFString)*1);
   32298           0 :         p->fontName.count = 1;
   32299           0 :         p->fontName.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
   32300           0 :         strcpy(p->fontName.vals[0], "SERIF");
   32301           0 :         p->horizontal = 1;
   32302           0 :         p->justify.vals = (char**)gf_malloc(sizeof(SFString)*1);
   32303           0 :         p->justify.count = 1;
   32304           0 :         p->justify.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
   32305           0 :         strcpy(p->justify.vals[0], "BEGIN");
   32306           0 :         p->leftToRight = 1;
   32307           0 :         p->size = FLT2FIX(1.0);
   32308           0 :         p->stretch.buffer = (char*)gf_malloc(sizeof(char) * 7);
   32309           0 :         strcpy(p->stretch.buffer, "NORMAL");
   32310           0 :         p->letterSpacing = FLT2FIX(0.0);
   32311           0 :         p->wordSpacing = FLT2FIX(0.0);
   32312           0 :         p->weight = 400;
   32313           0 :         p->fontKerning = 1;
   32314           0 :         p->style.buffer = (char*)gf_malloc(sizeof(char) * 6);
   32315           0 :         strcpy(p->style.buffer, "PLAIN");
   32316           0 :         p->topToBottom = 1;
   32317           0 :         return (GF_Node *)p;
   32318           0 : }
   32319             : 
   32320             : 
   32321             : /*
   32322             :         XLineProperties Node deletion
   32323             : */
   32324             : 
   32325             : static void XLineProperties_Del(GF_Node *node)
   32326             : {
   32327         960 :         M_XLineProperties *p = (M_XLineProperties *) node;
   32328         480 :         gf_sg_mffloat_del(p->dashes);
   32329         480 :         gf_node_unregister((GF_Node *) p->texture, (GF_Node *) p);
   32330         480 :         gf_node_unregister((GF_Node *) p->textureTransform, (GF_Node *) p);
   32331         480 :         gf_node_free((GF_Node *) p);
   32332         480 : }
   32333             : 
   32334             : static const u16 XLineProperties_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   32335             : static const u16 XLineProperties_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   32336             : static const u16 XLineProperties_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   32337             : static const u16 XLineProperties_Dyn2All[] = { 0, 7, 8, 9, 10};
   32338             : 
   32339             : static u32 XLineProperties_get_field_count(GF_Node *node, u8 IndexMode)
   32340             : {
   32341        1076 :         switch(IndexMode) {
   32342             :         case GF_SG_FIELD_CODING_IN:
   32343         108 :                 return 13;
   32344             :         case GF_SG_FIELD_CODING_DEF:
   32345         227 :                 return 13;
   32346             :         case GF_SG_FIELD_CODING_OUT:
   32347           0 :                 return 13;
   32348             :         case GF_SG_FIELD_CODING_DYN:
   32349           0 :                 return 5;
   32350             :         default:
   32351         203 :                 return 13;
   32352             :         }
   32353         538 : }
   32354             : 
   32355             : static GF_Err XLineProperties_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   32356             : {
   32357        2506 :         switch(IndexMode) {
   32358             :         case GF_SG_FIELD_CODING_IN:
   32359         248 :                 *allField = XLineProperties_In2All[inField];
   32360         248 :                 return GF_OK;
   32361             :         case GF_SG_FIELD_CODING_DEF:
   32362        1005 :                 *allField = XLineProperties_Def2All[inField];
   32363        1005 :                 return GF_OK;
   32364             :         case GF_SG_FIELD_CODING_OUT:
   32365           0 :                 *allField = XLineProperties_Out2All[inField];
   32366           0 :                 return GF_OK;
   32367             :         case GF_SG_FIELD_CODING_DYN:
   32368           0 :                 *allField = XLineProperties_Dyn2All[inField];
   32369           0 :                 return GF_OK;
   32370             :         default:
   32371           0 :                 return GF_BAD_PARAM;
   32372             :         }
   32373        1253 : }
   32374             : static GF_Err XLineProperties_get_field(GF_Node *node, GF_FieldInfo *info)
   32375             : {
   32376       14342 :         switch (info->fieldIndex) {
   32377             :         case 0:
   32378         805 :                 info->name = "lineColor";
   32379         805 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32380         805 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   32381         805 :                 info->far_ptr = & ((M_XLineProperties *) node)->lineColor;
   32382         805 :                 return GF_OK;
   32383             :         case 1:
   32384         552 :                 info->name = "lineStyle";
   32385         552 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32386         552 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32387         552 :                 info->far_ptr = & ((M_XLineProperties *) node)->lineStyle;
   32388         552 :                 return GF_OK;
   32389             :         case 2:
   32390         568 :                 info->name = "isCenterAligned";
   32391         568 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32392         568 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32393         568 :                 info->far_ptr = & ((M_XLineProperties *) node)->isCenterAligned;
   32394         568 :                 return GF_OK;
   32395             :         case 3:
   32396         511 :                 info->name = "isScalable";
   32397         511 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32398         511 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32399         511 :                 info->far_ptr = & ((M_XLineProperties *) node)->isScalable;
   32400         511 :                 return GF_OK;
   32401             :         case 4:
   32402         567 :                 info->name = "lineCap";
   32403         567 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32404         567 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32405         567 :                 info->far_ptr = & ((M_XLineProperties *) node)->lineCap;
   32406         567 :                 return GF_OK;
   32407             :         case 5:
   32408         522 :                 info->name = "lineJoin";
   32409         522 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32410         522 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32411         522 :                 info->far_ptr = & ((M_XLineProperties *) node)->lineJoin;
   32412         522 :                 return GF_OK;
   32413             :         case 6:
   32414         507 :                 info->name = "miterLimit";
   32415         507 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32416         507 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32417         507 :                 info->far_ptr = & ((M_XLineProperties *) node)->miterLimit;
   32418         507 :                 return GF_OK;
   32419             :         case 7:
   32420         554 :                 info->name = "transparency";
   32421         554 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32422         554 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32423         554 :                 info->far_ptr = & ((M_XLineProperties *) node)->transparency;
   32424         554 :                 return GF_OK;
   32425             :         case 8:
   32426         958 :                 info->name = "width";
   32427         958 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32428         958 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32429         958 :                 info->far_ptr = & ((M_XLineProperties *) node)->width;
   32430         958 :                 return GF_OK;
   32431             :         case 9:
   32432         500 :                 info->name = "dashOffset";
   32433         500 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32434         500 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32435         500 :                 info->far_ptr = & ((M_XLineProperties *) node)->dashOffset;
   32436         500 :                 return GF_OK;
   32437             :         case 10:
   32438         530 :                 info->name = "dashes";
   32439         530 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32440         530 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   32441         530 :                 info->far_ptr = & ((M_XLineProperties *) node)->dashes;
   32442         530 :                 return GF_OK;
   32443             :         case 11:
   32444         336 :                 info->name = "texture";
   32445         336 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32446         336 :                 info->fieldType = GF_SG_VRML_SFNODE;
   32447         336 :                 info->NDTtype = NDT_SFTextureNode;
   32448         336 :                 info->far_ptr = & ((M_XLineProperties *)node)->texture;
   32449         336 :                 return GF_OK;
   32450             :         case 12:
   32451         261 :                 info->name = "textureTransform";
   32452         261 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32453         261 :                 info->fieldType = GF_SG_VRML_SFNODE;
   32454         261 :                 info->NDTtype = NDT_SFTextureTransformNode;
   32455         261 :                 info->far_ptr = & ((M_XLineProperties *)node)->textureTransform;
   32456         261 :                 return GF_OK;
   32457             :         default:
   32458           0 :                 return GF_BAD_PARAM;
   32459             :         }
   32460        7171 : }
   32461             : 
   32462             : 
   32463             : static s32 XLineProperties_get_field_index_by_name(char *name)
   32464             : {
   32465         798 :         if (!strcmp("lineColor", name)) return 0;
   32466         286 :         if (!strcmp("lineStyle", name)) return 1;
   32467         276 :         if (!strcmp("isCenterAligned", name)) return 2;
   32468         240 :         if (!strcmp("isScalable", name)) return 3;
   32469         244 :         if (!strcmp("lineCap", name)) return 4;
   32470         212 :         if (!strcmp("lineJoin", name)) return 5;
   32471         200 :         if (!strcmp("miterLimit", name)) return 6;
   32472         208 :         if (!strcmp("transparency", name)) return 7;
   32473         308 :         if (!strcmp("width", name)) return 8;
   32474          48 :         if (!strcmp("dashOffset", name)) return 9;
   32475          52 :         if (!strcmp("dashes", name)) return 10;
   32476          52 :         if (!strcmp("texture", name)) return 11;
   32477           8 :         if (!strcmp("textureTransform", name)) return 12;
   32478           0 :         return -1;
   32479         356 : }
   32480             : static Bool XLineProperties_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   32481             : {
   32482           0 :         switch (FieldIndex) {
   32483             :         case 0:
   32484           0 :                 *AType = 4;
   32485           0 :                 *QType = 4;
   32486           0 :                 *b_min = FLT2FIX(0);
   32487           0 :                 *b_max = FLT2FIX(1);
   32488           0 :                 return 1;
   32489             :         case 1:
   32490           0 :                 *AType = 0;
   32491           0 :                 *QType = 13;
   32492           0 :                 *QT13_bits = 3;
   32493           0 :                 *b_min = FLT2FIX(0);
   32494           0 :                 *b_max = FLT2FIX(5);
   32495           0 :                 return 1;
   32496             :         case 4:
   32497           0 :                 *AType = 0;
   32498           0 :                 *QType = 13;
   32499           0 :                 *QT13_bits = 3;
   32500           0 :                 *b_min = FLT2FIX(0);
   32501           0 :                 *b_max = FLT2FIX(2);
   32502           0 :                 return 1;
   32503             :         case 5:
   32504           0 :                 *AType = 0;
   32505           0 :                 *QType = 13;
   32506           0 :                 *QT13_bits = 3;
   32507           0 :                 *b_min = FLT2FIX(0);
   32508           0 :                 *b_max = FLT2FIX(2);
   32509           0 :                 return 1;
   32510             :         case 6:
   32511           0 :                 *AType = 0;
   32512           0 :                 *QType = 12;
   32513           0 :                 *b_min = FLT2FIX(1);
   32514           0 :                 *b_max = FIX_MAX;
   32515           0 :                 return 1;
   32516             :         case 7:
   32517           0 :                 *AType = 8;
   32518           0 :                 *QType = 4;
   32519           0 :                 *b_min = FLT2FIX(0);
   32520           0 :                 *b_max = FLT2FIX(1);
   32521           0 :                 return 1;
   32522             :         case 8:
   32523           0 :                 *AType = 7;
   32524           0 :                 *QType = 12;
   32525           0 :                 *b_min = FLT2FIX(0);
   32526           0 :                 *b_max = FIX_MAX;
   32527           0 :                 return 1;
   32528             :         case 9:
   32529           0 :                 *AType = 7;
   32530           0 :                 *QType = 12;
   32531           0 :                 *b_min = FLT2FIX(0);
   32532           0 :                 *b_max = FIX_MAX;
   32533           0 :                 return 1;
   32534             :         case 10:
   32535           0 :                 *AType = 7;
   32536           0 :                 *QType = 12;
   32537           0 :                 *b_min = FLT2FIX(0);
   32538           0 :                 *b_max = FIX_MAX;
   32539           0 :                 return 1;
   32540             :         default:
   32541           0 :                 return 0;
   32542             :         }
   32543           0 : }
   32544             : 
   32545             : 
   32546             : 
   32547             : GF_Node *XLineProperties_Create()
   32548             : {
   32549             :         M_XLineProperties *p;
   32550        1440 :         GF_SAFEALLOC(p, M_XLineProperties);
   32551         480 :         if(!p) return NULL;
   32552         480 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XLineProperties);
   32553             : 
   32554             :         /*default field values*/
   32555         480 :         p->lineColor.red = FLT2FIX(0);
   32556         480 :         p->lineColor.green = FLT2FIX(0);
   32557         480 :         p->lineColor.blue = FLT2FIX(0);
   32558         480 :         p->lineStyle = 0;
   32559         480 :         p->isCenterAligned = 1;
   32560         480 :         p->isScalable = 1;
   32561         480 :         p->lineCap = 0;
   32562         480 :         p->lineJoin = 0;
   32563         480 :         p->miterLimit = FLT2FIX(4);
   32564         480 :         p->transparency = FLT2FIX(0);
   32565         480 :         p->width = FLT2FIX(1);
   32566         480 :         p->dashOffset = FLT2FIX(0);
   32567         480 :         return (GF_Node *)p;
   32568         480 : }
   32569             : 
   32570             : 
   32571             : /*
   32572             :         AdvancedAudioBuffer Node deletion
   32573             : */
   32574             : 
   32575             : static void AdvancedAudioBuffer_Del(GF_Node *node)
   32576             : {
   32577           0 :         M_AdvancedAudioBuffer *p = (M_AdvancedAudioBuffer *) node;
   32578           0 :         gf_sg_mfint32_del(p->phaseGroup);
   32579           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   32580           0 :         gf_node_free((GF_Node *) p);
   32581           0 : }
   32582             : 
   32583             : static const u16 AdvancedAudioBuffer_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
   32584             : static const u16 AdvancedAudioBuffer_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
   32585             : static const u16 AdvancedAudioBuffer_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17};
   32586             : static const u16 AdvancedAudioBuffer_Dyn2All[] = { 4};
   32587             : 
   32588             : static u32 AdvancedAudioBuffer_get_field_count(GF_Node *node, u8 IndexMode)
   32589             : {
   32590           0 :         switch(IndexMode) {
   32591             :         case GF_SG_FIELD_CODING_IN:
   32592           0 :                 return 14;
   32593             :         case GF_SG_FIELD_CODING_DEF:
   32594           0 :                 return 14;
   32595             :         case GF_SG_FIELD_CODING_OUT:
   32596           0 :                 return 14;
   32597             :         case GF_SG_FIELD_CODING_DYN:
   32598           0 :                 return 1;
   32599             :         default:
   32600           0 :                 return 18;
   32601             :         }
   32602           0 : }
   32603             : 
   32604             : static GF_Err AdvancedAudioBuffer_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   32605             : {
   32606           0 :         switch(IndexMode) {
   32607             :         case GF_SG_FIELD_CODING_IN:
   32608           0 :                 *allField = AdvancedAudioBuffer_In2All[inField];
   32609           0 :                 return GF_OK;
   32610             :         case GF_SG_FIELD_CODING_DEF:
   32611           0 :                 *allField = AdvancedAudioBuffer_Def2All[inField];
   32612           0 :                 return GF_OK;
   32613             :         case GF_SG_FIELD_CODING_OUT:
   32614           0 :                 *allField = AdvancedAudioBuffer_Out2All[inField];
   32615           0 :                 return GF_OK;
   32616             :         case GF_SG_FIELD_CODING_DYN:
   32617           0 :                 *allField = AdvancedAudioBuffer_Dyn2All[inField];
   32618           0 :                 return GF_OK;
   32619             :         default:
   32620           0 :                 return GF_BAD_PARAM;
   32621             :         }
   32622           0 : }
   32623             : static GF_Err AdvancedAudioBuffer_get_field(GF_Node *node, GF_FieldInfo *info)
   32624             : {
   32625           0 :         switch (info->fieldIndex) {
   32626             :         case 0:
   32627           0 :                 info->name = "addChildren";
   32628           0 :                 info->eventType = GF_SG_EVENT_IN;
   32629           0 :                 info->on_event_in = ((M_AdvancedAudioBuffer *)node)->on_addChildren;
   32630           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32631           0 :                 info->NDTtype = NDT_SFAudioNode;
   32632           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *)node)->addChildren;
   32633           0 :                 return GF_OK;
   32634             :         case 1:
   32635           0 :                 info->name = "removeChildren";
   32636           0 :                 info->eventType = GF_SG_EVENT_IN;
   32637           0 :                 info->on_event_in = ((M_AdvancedAudioBuffer *)node)->on_removeChildren;
   32638           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32639           0 :                 info->NDTtype = NDT_SFAudioNode;
   32640           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *)node)->removeChildren;
   32641           0 :                 return GF_OK;
   32642             :         case 2:
   32643           0 :                 info->name = "children";
   32644           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32645           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32646           0 :                 info->NDTtype = NDT_SFAudioNode;
   32647           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *)node)->children;
   32648           0 :                 return GF_OK;
   32649             :         case 3:
   32650           0 :                 info->name = "loop";
   32651           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32652           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32653           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->loop;
   32654           0 :                 return GF_OK;
   32655             :         case 4:
   32656           0 :                 info->name = "pitch";
   32657           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32658           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32659           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->pitch;
   32660           0 :                 return GF_OK;
   32661             :         case 5:
   32662           0 :                 info->name = "startTime";
   32663           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32664           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32665           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->startTime;
   32666           0 :                 return GF_OK;
   32667             :         case 6:
   32668           0 :                 info->name = "stopTime";
   32669           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32670           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32671           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->stopTime;
   32672           0 :                 return GF_OK;
   32673             :         case 7:
   32674           0 :                 info->name = "startLoadTime";
   32675           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32676           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32677           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->startLoadTime;
   32678           0 :                 return GF_OK;
   32679             :         case 8:
   32680           0 :                 info->name = "stopLoadTime";
   32681           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32682           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32683           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->stopLoadTime;
   32684           0 :                 return GF_OK;
   32685             :         case 9:
   32686           0 :                 info->name = "loadMode";
   32687           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32688           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32689           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->loadMode;
   32690           0 :                 return GF_OK;
   32691             :         case 10:
   32692           0 :                 info->name = "numAccumulatedBlocks";
   32693           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32694           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32695           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->numAccumulatedBlocks;
   32696           0 :                 return GF_OK;
   32697             :         case 11:
   32698           0 :                 info->name = "deleteBlock";
   32699           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32700           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32701           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->deleteBlock;
   32702           0 :                 return GF_OK;
   32703             :         case 12:
   32704           0 :                 info->name = "playBlock";
   32705           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32706           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32707           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->playBlock;
   32708           0 :                 return GF_OK;
   32709             :         case 13:
   32710           0 :                 info->name = "length";
   32711           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32712           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32713           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->length;
   32714           0 :                 return GF_OK;
   32715             :         case 14:
   32716           0 :                 info->name = "numChan";
   32717           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   32718           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32719           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->numChan;
   32720           0 :                 return GF_OK;
   32721             :         case 15:
   32722           0 :                 info->name = "phaseGroup";
   32723           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   32724           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32725           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->phaseGroup;
   32726           0 :                 return GF_OK;
   32727             :         case 16:
   32728           0 :                 info->name = "duration_changed";
   32729           0 :                 info->eventType = GF_SG_EVENT_OUT;
   32730           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32731           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->duration_changed;
   32732           0 :                 return GF_OK;
   32733             :         case 17:
   32734           0 :                 info->name = "isActive";
   32735           0 :                 info->eventType = GF_SG_EVENT_OUT;
   32736           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32737           0 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->isActive;
   32738           0 :                 return GF_OK;
   32739             :         default:
   32740           0 :                 return GF_BAD_PARAM;
   32741             :         }
   32742           0 : }
   32743             : 
   32744             : 
   32745             : static s32 AdvancedAudioBuffer_get_field_index_by_name(char *name)
   32746             : {
   32747           0 :         if (!strcmp("addChildren", name)) return 0;
   32748           0 :         if (!strcmp("removeChildren", name)) return 1;
   32749           0 :         if (!strcmp("children", name)) return 2;
   32750           0 :         if (!strcmp("loop", name)) return 3;
   32751           0 :         if (!strcmp("pitch", name)) return 4;
   32752           0 :         if (!strcmp("startTime", name)) return 5;
   32753           0 :         if (!strcmp("stopTime", name)) return 6;
   32754           0 :         if (!strcmp("startLoadTime", name)) return 7;
   32755           0 :         if (!strcmp("stopLoadTime", name)) return 8;
   32756           0 :         if (!strcmp("loadMode", name)) return 9;
   32757           0 :         if (!strcmp("numAccumulatedBlocks", name)) return 10;
   32758           0 :         if (!strcmp("deleteBlock", name)) return 11;
   32759           0 :         if (!strcmp("playBlock", name)) return 12;
   32760           0 :         if (!strcmp("length", name)) return 13;
   32761           0 :         if (!strcmp("numChan", name)) return 14;
   32762           0 :         if (!strcmp("phaseGroup", name)) return 15;
   32763           0 :         if (!strcmp("duration_changed", name)) return 16;
   32764           0 :         if (!strcmp("isActive", name)) return 17;
   32765           0 :         return -1;
   32766           0 : }
   32767             : static Bool AdvancedAudioBuffer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   32768             : {
   32769           0 :         switch (FieldIndex) {
   32770             :         case 4:
   32771           0 :                 *AType = 7;
   32772           0 :                 *QType = 0;
   32773           0 :                 *b_min = FLT2FIX(0);
   32774           0 :                 *b_max = FIX_MAX;
   32775           0 :                 return 1;
   32776             :         case 5:
   32777           0 :                 *AType = 0;
   32778           0 :                 *QType = 0;
   32779           0 :                 *b_min = FLT2FIX(0);
   32780           0 :                 *b_max = FIX_MAX;
   32781           0 :                 return 1;
   32782             :         case 6:
   32783           0 :                 *AType = 0;
   32784           0 :                 *QType = 0;
   32785           0 :                 *b_min = FLT2FIX(0);
   32786           0 :                 *b_max = FIX_MAX;
   32787           0 :                 return 1;
   32788             :         case 7:
   32789           0 :                 *AType = 0;
   32790           0 :                 *QType = 0;
   32791           0 :                 *b_min = FLT2FIX(0);
   32792           0 :                 *b_max = FIX_MAX;
   32793           0 :                 return 1;
   32794             :         case 8:
   32795           0 :                 *AType = 0;
   32796           0 :                 *QType = 0;
   32797           0 :                 *b_min = FLT2FIX(0);
   32798           0 :                 *b_max = FIX_MAX;
   32799           0 :                 return 1;
   32800             :         case 9:
   32801           0 :                 *AType = 0;
   32802           0 :                 *QType = 13;
   32803           0 :                 *QT13_bits = 3;
   32804           0 :                 *b_min = FLT2FIX(0);
   32805           0 :                 *b_max = FLT2FIX(4);
   32806           0 :                 return 1;
   32807             :         case 10:
   32808           0 :                 *AType = 0;
   32809           0 :                 *QType = 13;
   32810           0 :                 *QT13_bits = 16;
   32811           0 :                 *b_min = FLT2FIX(0);
   32812           0 :                 *b_max = FIX_MAX;
   32813           0 :                 return 1;
   32814             :         case 11:
   32815           0 :                 *AType = 0;
   32816           0 :                 *QType = 13;
   32817           0 :                 *QT13_bits = 17;
   32818           0 :                 *b_min = FIX_MIN;
   32819           0 :                 *b_max = FLT2FIX( 0);
   32820           0 :                 return 1;
   32821             :         case 12:
   32822           0 :                 *AType = 0;
   32823           0 :                 *QType = 13;
   32824           0 :                 *QT13_bits = 17;
   32825           0 :                 *b_min = FIX_MIN;
   32826           0 :                 *b_max = FLT2FIX( 0);
   32827           0 :                 return 1;
   32828             :         case 13:
   32829           0 :                 *AType = 0;
   32830           0 :                 *QType = 0;
   32831           0 :                 *b_min = FLT2FIX(0);
   32832           0 :                 *b_max = FIX_MAX;
   32833           0 :                 return 1;
   32834             :         case 14:
   32835           0 :                 *AType = 0;
   32836           0 :                 *QType = 13;
   32837           0 :                 *QT13_bits = 8;
   32838           0 :                 *b_min = FLT2FIX(0);
   32839           0 :                 *b_max = FLT2FIX(255);
   32840           0 :                 return 1;
   32841             :         case 15:
   32842           0 :                 *AType = 0;
   32843           0 :                 *QType = 13;
   32844           0 :                 *QT13_bits = 8;
   32845           0 :                 *b_min = FLT2FIX(0);
   32846           0 :                 *b_max = FLT2FIX(255);
   32847           0 :                 return 1;
   32848             :         default:
   32849           0 :                 return 0;
   32850             :         }
   32851           0 : }
   32852             : 
   32853             : 
   32854             : 
   32855             : GF_Node *AdvancedAudioBuffer_Create()
   32856             : {
   32857             :         M_AdvancedAudioBuffer *p;
   32858           0 :         GF_SAFEALLOC(p, M_AdvancedAudioBuffer);
   32859           0 :         if(!p) return NULL;
   32860           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AdvancedAudioBuffer);
   32861           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   32862             : 
   32863             :         /*default field values*/
   32864           0 :         p->pitch = FLT2FIX(1.0);
   32865           0 :         p->startTime = 0;
   32866           0 :         p->stopTime = 0;
   32867           0 :         p->startLoadTime = 0;
   32868           0 :         p->stopLoadTime = 0;
   32869           0 :         p->loadMode = 0;
   32870           0 :         p->numAccumulatedBlocks = 0;
   32871           0 :         p->deleteBlock = 0;
   32872           0 :         p->playBlock = 0;
   32873           0 :         p->length = FLT2FIX(0.0);
   32874           0 :         p->numChan = 1;
   32875           0 :         return (GF_Node *)p;
   32876           0 : }
   32877             : 
   32878             : 
   32879             : /*
   32880             :         AudioChannelConfig Node deletion
   32881             : */
   32882             : 
   32883             : static void AudioChannelConfig_Del(GF_Node *node)
   32884             : {
   32885           0 :         M_AudioChannelConfig *p = (M_AudioChannelConfig *) node;
   32886           0 :         gf_sg_mfint32_del(p->channelCoordinateSystems);
   32887           0 :         gf_sg_mffloat_del(p->channelSoundLocation);
   32888           0 :         gf_sg_mfint32_del(p->channelDirectionalPattern);
   32889           0 :         gf_sg_mfvec3f_del(p->channelDirection);
   32890           0 :         gf_sg_mfint32_del(p->ambComponentIndex);
   32891           0 :         gf_sg_mffloat_del(p->ambBackwardMatrix);
   32892           0 :         gf_sg_mfint32_del(p->ambSoundfieldResolution);
   32893           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   32894           0 :         gf_node_free((GF_Node *) p);
   32895           0 : }
   32896             : 
   32897             : static const u16 AudioChannelConfig_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21};
   32898             : static const u16 AudioChannelConfig_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   32899             : static const u16 AudioChannelConfig_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   32900             : 
   32901             : static u32 AudioChannelConfig_get_field_count(GF_Node *node, u8 IndexMode)
   32902             : {
   32903           0 :         switch(IndexMode) {
   32904             :         case GF_SG_FIELD_CODING_IN:
   32905           0 :                 return 21;
   32906             :         case GF_SG_FIELD_CODING_DEF:
   32907           0 :                 return 20;
   32908             :         case GF_SG_FIELD_CODING_OUT:
   32909           0 :                 return 19;
   32910             :         case GF_SG_FIELD_CODING_DYN:
   32911           0 :                 return 0;
   32912             :         default:
   32913           0 :                 return 22;
   32914             :         }
   32915           0 : }
   32916             : 
   32917             : static GF_Err AudioChannelConfig_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   32918             : {
   32919           0 :         switch(IndexMode) {
   32920             :         case GF_SG_FIELD_CODING_IN:
   32921           0 :                 *allField = AudioChannelConfig_In2All[inField];
   32922           0 :                 return GF_OK;
   32923             :         case GF_SG_FIELD_CODING_DEF:
   32924           0 :                 *allField = AudioChannelConfig_Def2All[inField];
   32925           0 :                 return GF_OK;
   32926             :         case GF_SG_FIELD_CODING_OUT:
   32927           0 :                 *allField = AudioChannelConfig_Out2All[inField];
   32928           0 :                 return GF_OK;
   32929             :         default:
   32930           0 :                 return GF_BAD_PARAM;
   32931             :         }
   32932           0 : }
   32933             : static GF_Err AudioChannelConfig_get_field(GF_Node *node, GF_FieldInfo *info)
   32934             : {
   32935           0 :         switch (info->fieldIndex) {
   32936             :         case 0:
   32937           0 :                 info->name = "addChildren";
   32938           0 :                 info->eventType = GF_SG_EVENT_IN;
   32939           0 :                 info->on_event_in = ((M_AudioChannelConfig *)node)->on_addChildren;
   32940           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32941           0 :                 info->NDTtype = NDT_SFAudioNode;
   32942           0 :                 info->far_ptr = & ((M_AudioChannelConfig *)node)->addChildren;
   32943           0 :                 return GF_OK;
   32944             :         case 1:
   32945           0 :                 info->name = "removeChildren";
   32946           0 :                 info->eventType = GF_SG_EVENT_IN;
   32947           0 :                 info->on_event_in = ((M_AudioChannelConfig *)node)->on_removeChildren;
   32948           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32949           0 :                 info->NDTtype = NDT_SFAudioNode;
   32950           0 :                 info->far_ptr = & ((M_AudioChannelConfig *)node)->removeChildren;
   32951           0 :                 return GF_OK;
   32952             :         case 2:
   32953           0 :                 info->name = "children";
   32954           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32955           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32956           0 :                 info->NDTtype = NDT_SFAudioNode;
   32957           0 :                 info->far_ptr = & ((M_AudioChannelConfig *)node)->children;
   32958           0 :                 return GF_OK;
   32959             :         case 3:
   32960           0 :                 info->name = "generalChannelFormat";
   32961           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32962           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32963           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->generalChannelFormat;
   32964           0 :                 return GF_OK;
   32965             :         case 4:
   32966           0 :                 info->name = "fixedPreset";
   32967           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32968           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32969           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->fixedPreset;
   32970           0 :                 return GF_OK;
   32971             :         case 5:
   32972           0 :                 info->name = "fixedPresetSubset";
   32973           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32974           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32975           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->fixedPresetSubset;
   32976           0 :                 return GF_OK;
   32977             :         case 6:
   32978           0 :                 info->name = "fixedPresetAddInf";
   32979           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32980           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32981           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->fixedPresetAddInf;
   32982           0 :                 return GF_OK;
   32983             :         case 7:
   32984           0 :                 info->name = "channelCoordinateSystems";
   32985           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32986           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32987           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->channelCoordinateSystems;
   32988           0 :                 return GF_OK;
   32989             :         case 8:
   32990           0 :                 info->name = "channelSoundLocation";
   32991           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32992           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   32993           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->channelSoundLocation;
   32994           0 :                 return GF_OK;
   32995             :         case 9:
   32996           0 :                 info->name = "channelDirectionalPattern";
   32997           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32998           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32999           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->channelDirectionalPattern;
   33000           0 :                 return GF_OK;
   33001             :         case 10:
   33002           0 :                 info->name = "channelDirection";
   33003           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33004           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   33005           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->channelDirection;
   33006           0 :                 return GF_OK;
   33007             :         case 11:
   33008           0 :                 info->name = "ambResolution2D";
   33009           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33010           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33011           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambResolution2D;
   33012           0 :                 return GF_OK;
   33013             :         case 12:
   33014           0 :                 info->name = "ambResolution3D";
   33015           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33016           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33017           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambResolution3D;
   33018           0 :                 return GF_OK;
   33019             :         case 13:
   33020           0 :                 info->name = "ambEncodingConvention";
   33021           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33022           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33023           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambEncodingConvention;
   33024           0 :                 return GF_OK;
   33025             :         case 14:
   33026           0 :                 info->name = "ambNfcReferenceDistance";
   33027           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33028           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33029           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambNfcReferenceDistance;
   33030           0 :                 return GF_OK;
   33031             :         case 15:
   33032           0 :                 info->name = "ambSoundSpeed";
   33033           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33034           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33035           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambSoundSpeed;
   33036           0 :                 return GF_OK;
   33037             :         case 16:
   33038           0 :                 info->name = "ambArrangementRule";
   33039           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33040           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33041           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambArrangementRule;
   33042           0 :                 return GF_OK;
   33043             :         case 17:
   33044           0 :                 info->name = "ambRecombinationPreset";
   33045           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33046           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33047           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambRecombinationPreset;
   33048           0 :                 return GF_OK;
   33049             :         case 18:
   33050           0 :                 info->name = "ambComponentIndex";
   33051           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33052           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33053           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambComponentIndex;
   33054           0 :                 return GF_OK;
   33055             :         case 19:
   33056           0 :                 info->name = "ambBackwardMatrix";
   33057           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33058           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   33059           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambBackwardMatrix;
   33060           0 :                 return GF_OK;
   33061             :         case 20:
   33062           0 :                 info->name = "ambSoundfieldResolution";
   33063           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33064           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33065           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambSoundfieldResolution;
   33066           0 :                 return GF_OK;
   33067             :         case 21:
   33068           0 :                 info->name = "numChannel";
   33069           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33070           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33071           0 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->numChannel;
   33072           0 :                 return GF_OK;
   33073             :         default:
   33074           0 :                 return GF_BAD_PARAM;
   33075             :         }
   33076           0 : }
   33077             : 
   33078             : 
   33079             : static s32 AudioChannelConfig_get_field_index_by_name(char *name)
   33080             : {
   33081           0 :         if (!strcmp("addChildren", name)) return 0;
   33082           0 :         if (!strcmp("removeChildren", name)) return 1;
   33083           0 :         if (!strcmp("children", name)) return 2;
   33084           0 :         if (!strcmp("generalChannelFormat", name)) return 3;
   33085           0 :         if (!strcmp("fixedPreset", name)) return 4;
   33086           0 :         if (!strcmp("fixedPresetSubset", name)) return 5;
   33087           0 :         if (!strcmp("fixedPresetAddInf", name)) return 6;
   33088           0 :         if (!strcmp("channelCoordinateSystems", name)) return 7;
   33089           0 :         if (!strcmp("channelSoundLocation", name)) return 8;
   33090           0 :         if (!strcmp("channelDirectionalPattern", name)) return 9;
   33091           0 :         if (!strcmp("channelDirection", name)) return 10;
   33092           0 :         if (!strcmp("ambResolution2D", name)) return 11;
   33093           0 :         if (!strcmp("ambResolution3D", name)) return 12;
   33094           0 :         if (!strcmp("ambEncodingConvention", name)) return 13;
   33095           0 :         if (!strcmp("ambNfcReferenceDistance", name)) return 14;
   33096           0 :         if (!strcmp("ambSoundSpeed", name)) return 15;
   33097           0 :         if (!strcmp("ambArrangementRule", name)) return 16;
   33098           0 :         if (!strcmp("ambRecombinationPreset", name)) return 17;
   33099           0 :         if (!strcmp("ambComponentIndex", name)) return 18;
   33100           0 :         if (!strcmp("ambBackwardMatrix", name)) return 19;
   33101           0 :         if (!strcmp("ambSoundfieldResolution", name)) return 20;
   33102           0 :         if (!strcmp("numChannel", name)) return 21;
   33103           0 :         return -1;
   33104           0 : }
   33105             : static Bool AudioChannelConfig_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33106             : {
   33107           0 :         switch (FieldIndex) {
   33108             :         case 3:
   33109           0 :                 *AType = 0;
   33110           0 :                 *QType = 13;
   33111           0 :                 *QT13_bits = 3;
   33112           0 :                 *b_min = FLT2FIX(0);
   33113           0 :                 *b_max = FLT2FIX(4);
   33114           0 :                 return 1;
   33115             :         case 4:
   33116           0 :                 *AType = 0;
   33117           0 :                 *QType = 13;
   33118           0 :                 *QT13_bits = 4;
   33119           0 :                 *b_min = FLT2FIX(0);
   33120           0 :                 *b_max = FLT2FIX(15);
   33121           0 :                 return 1;
   33122             :         case 6:
   33123           0 :                 *AType = 0;
   33124           0 :                 *QType = 13;
   33125           0 :                 *QT13_bits = 3;
   33126           0 :                 *b_min = FLT2FIX(0);
   33127           0 :                 *b_max = FLT2FIX(2);
   33128           0 :                 return 1;
   33129             :         case 7:
   33130           0 :                 *AType = 0;
   33131           0 :                 *QType = 13;
   33132           0 :                 *QT13_bits = 3;
   33133           0 :                 *b_min = FLT2FIX(0);
   33134           0 :                 *b_max = FLT2FIX(6);
   33135           0 :                 return 1;
   33136             :         case 9:
   33137           0 :                 *AType = 0;
   33138           0 :                 *QType = 13;
   33139           0 :                 *QT13_bits = 3;
   33140           0 :                 *b_min = FLT2FIX(0);
   33141           0 :                 *b_max = FLT2FIX(2);
   33142           0 :                 return 1;
   33143             :         case 11:
   33144           0 :                 *AType = 0;
   33145           0 :                 *QType = 13;
   33146           0 :                 *QT13_bits = 7;
   33147           0 :                 *b_min = FLT2FIX(0);
   33148           0 :                 *b_max = FLT2FIX(127);
   33149           0 :                 return 1;
   33150             :         case 12:
   33151           0 :                 *AType = 0;
   33152           0 :                 *QType = 13;
   33153           0 :                 *QT13_bits = 4;
   33154           0 :                 *b_min = FLT2FIX(0);
   33155           0 :                 *b_max = FLT2FIX(15);
   33156           0 :                 return 1;
   33157             :         case 13:
   33158           0 :                 *AType = 0;
   33159           0 :                 *QType = 13;
   33160           0 :                 *QT13_bits = 3;
   33161           0 :                 *b_min = FLT2FIX(0);
   33162           0 :                 *b_max = FLT2FIX(5);
   33163           0 :                 return 1;
   33164             :         case 16:
   33165           0 :                 *AType = 0;
   33166           0 :                 *QType = 13;
   33167           0 :                 *QT13_bits = 3;
   33168           0 :                 *b_min = FLT2FIX(0);
   33169           0 :                 *b_max = FLT2FIX(7);
   33170           0 :                 return 1;
   33171             :         case 17:
   33172           0 :                 *AType = 0;
   33173           0 :                 *QType = 13;
   33174           0 :                 *QT13_bits = 4;
   33175           0 :                 *b_min = FLT2FIX(0);
   33176           0 :                 *b_max = FLT2FIX(15);
   33177           0 :                 return 1;
   33178             :         case 18:
   33179           0 :                 *AType = 0;
   33180           0 :                 *QType = 13;
   33181           0 :                 *QT13_bits = 8;
   33182           0 :                 *b_min = FLT2FIX(0);
   33183           0 :                 *b_max = FLT2FIX(255);
   33184           0 :                 return 1;
   33185             :         case 20:
   33186           0 :                 *AType = 0;
   33187           0 :                 *QType = 13;
   33188           0 :                 *QT13_bits = 7;
   33189           0 :                 *b_min = FLT2FIX(0);
   33190           0 :                 *b_max = FLT2FIX(127);
   33191           0 :                 return 1;
   33192             :         case 21:
   33193           0 :                 *AType = 0;
   33194           0 :                 *QType = 13;
   33195           0 :                 *QT13_bits = 8;
   33196           0 :                 *b_min = FLT2FIX(0);
   33197           0 :                 *b_max = FLT2FIX(255);
   33198           0 :                 return 1;
   33199             :         default:
   33200           0 :                 return 0;
   33201             :         }
   33202           0 : }
   33203             : 
   33204             : 
   33205             : 
   33206             : GF_Node *AudioChannelConfig_Create()
   33207             : {
   33208             :         M_AudioChannelConfig *p;
   33209           0 :         GF_SAFEALLOC(p, M_AudioChannelConfig);
   33210           0 :         if(!p) return NULL;
   33211           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioChannelConfig);
   33212           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   33213             : 
   33214             :         /*default field values*/
   33215           0 :         p->generalChannelFormat = 0;
   33216           0 :         p->fixedPreset = 0;
   33217           0 :         p->fixedPresetSubset = 0;
   33218           0 :         p->fixedPresetAddInf = 0;
   33219           0 :         p->ambResolution2D = 1;
   33220           0 :         p->ambResolution3D = 0;
   33221           0 :         p->ambEncodingConvention = 0;
   33222           0 :         p->ambNfcReferenceDistance = FLT2FIX(1.5);
   33223           0 :         p->ambSoundSpeed = FLT2FIX(340.0);
   33224           0 :         p->ambArrangementRule = 0;
   33225           0 :         p->ambRecombinationPreset = 0;
   33226           0 :         p->numChannel = 0;
   33227           0 :         return (GF_Node *)p;
   33228           0 : }
   33229             : 
   33230             : 
   33231             : /*
   33232             :         DepthImageV2 Node deletion
   33233             : */
   33234             : 
   33235             : static void DepthImageV2_Del(GF_Node *node)
   33236             : {
   33237           0 :         M_DepthImageV2 *p = (M_DepthImageV2 *) node;
   33238           0 :         gf_node_unregister((GF_Node *) p->diTexture, (GF_Node *) p);
   33239           0 :         gf_node_free((GF_Node *) p);
   33240           0 : }
   33241             : 
   33242             : static const u16 DepthImageV2_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33243             : 
   33244             : static u32 DepthImageV2_get_field_count(GF_Node *node, u8 IndexMode)
   33245             : {
   33246           0 :         switch(IndexMode) {
   33247             :         case GF_SG_FIELD_CODING_IN:
   33248           0 :                 return 0;
   33249             :         case GF_SG_FIELD_CODING_DEF:
   33250           0 :                 return 8;
   33251             :         case GF_SG_FIELD_CODING_OUT:
   33252           0 :                 return 0;
   33253             :         case GF_SG_FIELD_CODING_DYN:
   33254           0 :                 return 0;
   33255             :         default:
   33256           0 :                 return 8;
   33257             :         }
   33258           0 : }
   33259             : 
   33260             : static GF_Err DepthImageV2_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33261             : {
   33262           0 :         switch(IndexMode) {
   33263             :         case GF_SG_FIELD_CODING_DEF:
   33264           0 :                 *allField = DepthImageV2_Def2All[inField];
   33265           0 :                 return GF_OK;
   33266             :         default:
   33267           0 :                 return GF_BAD_PARAM;
   33268             :         }
   33269           0 : }
   33270             : static GF_Err DepthImageV2_get_field(GF_Node *node, GF_FieldInfo *info)
   33271             : {
   33272           0 :         switch (info->fieldIndex) {
   33273             :         case 0:
   33274           0 :                 info->name = "diTexture";
   33275           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33276           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   33277           0 :                 info->NDTtype = NDT_SFDepthTextureNode;
   33278           0 :                 info->far_ptr = & ((M_DepthImageV2 *)node)->diTexture;
   33279           0 :                 return GF_OK;
   33280             :         case 1:
   33281           0 :                 info->name = "farPlane";
   33282           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33283           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33284           0 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->farPlane;
   33285           0 :                 return GF_OK;
   33286             :         case 2:
   33287           0 :                 info->name = "fieldOfView";
   33288           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33289           0 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   33290           0 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->fieldOfView;
   33291           0 :                 return GF_OK;
   33292             :         case 3:
   33293           0 :                 info->name = "nearPlane";
   33294           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33295           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33296           0 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->nearPlane;
   33297           0 :                 return GF_OK;
   33298             :         case 4:
   33299           0 :                 info->name = "orientation";
   33300           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33301           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   33302           0 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->orientation;
   33303           0 :                 return GF_OK;
   33304             :         case 5:
   33305           0 :                 info->name = "orthographic";
   33306           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33307           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   33308           0 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->orthographic;
   33309           0 :                 return GF_OK;
   33310             :         case 6:
   33311           0 :                 info->name = "position";
   33312           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33313           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   33314           0 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->position;
   33315           0 :                 return GF_OK;
   33316             :         case 7:
   33317           0 :                 info->name = "splatMinMax";
   33318           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33319           0 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   33320           0 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->splatMinMax;
   33321           0 :                 return GF_OK;
   33322             :         default:
   33323           0 :                 return GF_BAD_PARAM;
   33324             :         }
   33325           0 : }
   33326             : 
   33327             : 
   33328             : static s32 DepthImageV2_get_field_index_by_name(char *name)
   33329             : {
   33330           0 :         if (!strcmp("diTexture", name)) return 0;
   33331           0 :         if (!strcmp("farPlane", name)) return 1;
   33332           0 :         if (!strcmp("fieldOfView", name)) return 2;
   33333           0 :         if (!strcmp("nearPlane", name)) return 3;
   33334           0 :         if (!strcmp("orientation", name)) return 4;
   33335           0 :         if (!strcmp("orthographic", name)) return 5;
   33336           0 :         if (!strcmp("position", name)) return 6;
   33337           0 :         if (!strcmp("splatMinMax", name)) return 7;
   33338           0 :         return -1;
   33339           0 : }
   33340             : static Bool DepthImageV2_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33341             : {
   33342             :         switch (FieldIndex) {
   33343             :         default:
   33344           0 :                 return 0;
   33345             :         }
   33346             : }
   33347             : 
   33348             : 
   33349             : 
   33350             : GF_Node *DepthImageV2_Create()
   33351             : {
   33352             :         M_DepthImageV2 *p;
   33353           0 :         GF_SAFEALLOC(p, M_DepthImageV2);
   33354           0 :         if(!p) return NULL;
   33355           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DepthImageV2);
   33356             : 
   33357             :         /*default field values*/
   33358           0 :         p->farPlane = FLT2FIX(100);
   33359           0 :         p->fieldOfView.x = FLT2FIX(0.75);
   33360           0 :         p->fieldOfView.y = FLT2FIX(0.75);
   33361           0 :         p->nearPlane = FLT2FIX(10);
   33362           0 :         p->orientation.x = FLT2FIX(0);
   33363           0 :         p->orientation.y = FLT2FIX(0);
   33364           0 :         p->orientation.z = FLT2FIX(1);
   33365           0 :         p->orientation.q = FLT2FIX(0);
   33366           0 :         p->orthographic = 1;
   33367           0 :         p->position.x = FLT2FIX(0);
   33368           0 :         p->position.y = FLT2FIX(0);
   33369           0 :         p->position.z = FLT2FIX(10);
   33370           0 :         p->splatMinMax.x = FLT2FIX(0.115);
   33371           0 :         p->splatMinMax.y = FLT2FIX(0.975);
   33372           0 :         return (GF_Node *)p;
   33373           0 : }
   33374             : 
   33375             : 
   33376             : /*
   33377             :         MorphShape Node deletion
   33378             : */
   33379             : 
   33380             : static void MorphShape_Del(GF_Node *node)
   33381             : {
   33382           0 :         M_MorphShape *p = (M_MorphShape *) node;
   33383           0 :         gf_node_unregister((GF_Node *) p->baseShape, (GF_Node *) p);
   33384           0 :         gf_node_unregister_children((GF_Node *) p, p->targetShapes);
   33385           0 :         gf_sg_mffloat_del(p->weights);
   33386           0 :         gf_node_free((GF_Node *) p);
   33387           0 : }
   33388             : 
   33389             : static const u16 MorphShape_Def2All[] = { 0, 1, 2, 3};
   33390             : static const u16 MorphShape_In2All[] = { 0, 1, 2, 3};
   33391             : static const u16 MorphShape_Out2All[] = { 0, 1, 2, 3};
   33392             : 
   33393             : static u32 MorphShape_get_field_count(GF_Node *node, u8 IndexMode)
   33394             : {
   33395           0 :         switch(IndexMode) {
   33396             :         case GF_SG_FIELD_CODING_IN:
   33397           0 :                 return 4;
   33398             :         case GF_SG_FIELD_CODING_DEF:
   33399           0 :                 return 4;
   33400             :         case GF_SG_FIELD_CODING_OUT:
   33401           0 :                 return 4;
   33402             :         case GF_SG_FIELD_CODING_DYN:
   33403           0 :                 return 0;
   33404             :         default:
   33405           0 :                 return 4;
   33406             :         }
   33407           0 : }
   33408             : 
   33409             : static GF_Err MorphShape_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33410             : {
   33411           0 :         switch(IndexMode) {
   33412             :         case GF_SG_FIELD_CODING_IN:
   33413           0 :                 *allField = MorphShape_In2All[inField];
   33414           0 :                 return GF_OK;
   33415             :         case GF_SG_FIELD_CODING_DEF:
   33416           0 :                 *allField = MorphShape_Def2All[inField];
   33417           0 :                 return GF_OK;
   33418             :         case GF_SG_FIELD_CODING_OUT:
   33419           0 :                 *allField = MorphShape_Out2All[inField];
   33420           0 :                 return GF_OK;
   33421             :         default:
   33422           0 :                 return GF_BAD_PARAM;
   33423             :         }
   33424           0 : }
   33425             : static GF_Err MorphShape_get_field(GF_Node *node, GF_FieldInfo *info)
   33426             : {
   33427           0 :         switch (info->fieldIndex) {
   33428             :         case 0:
   33429           0 :                 info->name = "baseShape";
   33430           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33431           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   33432           0 :                 info->NDTtype = NDT_SF3DNode;
   33433           0 :                 info->far_ptr = & ((M_MorphShape *)node)->baseShape;
   33434           0 :                 return GF_OK;
   33435             :         case 1:
   33436           0 :                 info->name = "morphID";
   33437           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33438           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33439           0 :                 info->far_ptr = & ((M_MorphShape *) node)->morphID;
   33440           0 :                 return GF_OK;
   33441             :         case 2:
   33442           0 :                 info->name = "targetShapes";
   33443           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33444           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   33445           0 :                 info->NDTtype = NDT_SF3DNode;
   33446           0 :                 info->far_ptr = & ((M_MorphShape *)node)->targetShapes;
   33447           0 :                 return GF_OK;
   33448             :         case 3:
   33449           0 :                 info->name = "weights";
   33450           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33451           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   33452           0 :                 info->far_ptr = & ((M_MorphShape *) node)->weights;
   33453           0 :                 return GF_OK;
   33454             :         default:
   33455           0 :                 return GF_BAD_PARAM;
   33456             :         }
   33457           0 : }
   33458             : 
   33459             : 
   33460             : static s32 MorphShape_get_field_index_by_name(char *name)
   33461             : {
   33462           0 :         if (!strcmp("baseShape", name)) return 0;
   33463           0 :         if (!strcmp("morphID", name)) return 1;
   33464           0 :         if (!strcmp("targetShapes", name)) return 2;
   33465           0 :         if (!strcmp("weights", name)) return 3;
   33466           0 :         return -1;
   33467           0 : }
   33468             : static Bool MorphShape_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33469             : {
   33470           0 :         switch (FieldIndex) {
   33471             :         case 1:
   33472           0 :                 *AType = 0;
   33473           0 :                 *QType = 13;
   33474           0 :                 *QT13_bits = 7;
   33475           0 :                 *b_min = FLT2FIX(0);
   33476           0 :                 *b_max = FLT2FIX( 1023);
   33477           0 :                 return 1;
   33478             :         default:
   33479           0 :                 return 0;
   33480             :         }
   33481           0 : }
   33482             : 
   33483             : 
   33484             : 
   33485             : GF_Node *MorphShape_Create()
   33486             : {
   33487             :         M_MorphShape *p;
   33488           0 :         GF_SAFEALLOC(p, M_MorphShape);
   33489           0 :         if(!p) return NULL;
   33490           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MorphShape);
   33491             : 
   33492             :         /*default field values*/
   33493           0 :         p->morphID = 0;
   33494           0 :         return (GF_Node *)p;
   33495           0 : }
   33496             : 
   33497             : 
   33498             : /*
   33499             :         MultiTexture Node deletion
   33500             : */
   33501             : 
   33502             : static void MultiTexture_Del(GF_Node *node)
   33503             : {
   33504           0 :         M_MultiTexture *p = (M_MultiTexture *) node;
   33505           0 :         gf_sg_mfint32_del(p->function);
   33506           0 :         gf_sg_mfint32_del(p->mode);
   33507           0 :         gf_sg_mfint32_del(p->source);
   33508           0 :         gf_node_unregister_children((GF_Node *) p, p->texture);
   33509           0 :         gf_sg_mfvec3f_del(p->cameraVector);
   33510           0 :         gf_node_free((GF_Node *) p);
   33511           0 : }
   33512             : 
   33513             : static const u16 MultiTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33514             : static const u16 MultiTexture_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33515             : static const u16 MultiTexture_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33516             : 
   33517             : static u32 MultiTexture_get_field_count(GF_Node *node, u8 IndexMode)
   33518             : {
   33519           0 :         switch(IndexMode) {
   33520             :         case GF_SG_FIELD_CODING_IN:
   33521           0 :                 return 8;
   33522             :         case GF_SG_FIELD_CODING_DEF:
   33523           0 :                 return 8;
   33524             :         case GF_SG_FIELD_CODING_OUT:
   33525           0 :                 return 8;
   33526             :         case GF_SG_FIELD_CODING_DYN:
   33527           0 :                 return 0;
   33528             :         default:
   33529           0 :                 return 8;
   33530             :         }
   33531           0 : }
   33532             : 
   33533             : static GF_Err MultiTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33534             : {
   33535           0 :         switch(IndexMode) {
   33536             :         case GF_SG_FIELD_CODING_IN:
   33537           0 :                 *allField = MultiTexture_In2All[inField];
   33538           0 :                 return GF_OK;
   33539             :         case GF_SG_FIELD_CODING_DEF:
   33540           0 :                 *allField = MultiTexture_Def2All[inField];
   33541           0 :                 return GF_OK;
   33542             :         case GF_SG_FIELD_CODING_OUT:
   33543           0 :                 *allField = MultiTexture_Out2All[inField];
   33544           0 :                 return GF_OK;
   33545             :         default:
   33546           0 :                 return GF_BAD_PARAM;
   33547             :         }
   33548           0 : }
   33549             : static GF_Err MultiTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   33550             : {
   33551           0 :         switch (info->fieldIndex) {
   33552             :         case 0:
   33553           0 :                 info->name = "alpha";
   33554           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33555           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33556           0 :                 info->far_ptr = & ((M_MultiTexture *) node)->alpha;
   33557           0 :                 return GF_OK;
   33558             :         case 1:
   33559           0 :                 info->name = "color";
   33560           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33561           0 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   33562           0 :                 info->far_ptr = & ((M_MultiTexture *) node)->color;
   33563           0 :                 return GF_OK;
   33564             :         case 2:
   33565           0 :                 info->name = "function";
   33566           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33567           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33568           0 :                 info->far_ptr = & ((M_MultiTexture *) node)->function;
   33569           0 :                 return GF_OK;
   33570             :         case 3:
   33571           0 :                 info->name = "mode";
   33572           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33573           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33574           0 :                 info->far_ptr = & ((M_MultiTexture *) node)->mode;
   33575           0 :                 return GF_OK;
   33576             :         case 4:
   33577           0 :                 info->name = "source";
   33578           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33579           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33580           0 :                 info->far_ptr = & ((M_MultiTexture *) node)->source;
   33581           0 :                 return GF_OK;
   33582             :         case 5:
   33583           0 :                 info->name = "texture";
   33584           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33585           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   33586           0 :                 info->NDTtype = NDT_SFTextureNode;
   33587           0 :                 info->far_ptr = & ((M_MultiTexture *)node)->texture;
   33588           0 :                 return GF_OK;
   33589             :         case 6:
   33590           0 :                 info->name = "cameraVector";
   33591           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33592           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   33593           0 :                 info->far_ptr = & ((M_MultiTexture *) node)->cameraVector;
   33594           0 :                 return GF_OK;
   33595             :         case 7:
   33596           0 :                 info->name = "transparent";
   33597           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33598           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   33599           0 :                 info->far_ptr = & ((M_MultiTexture *) node)->transparent;
   33600           0 :                 return GF_OK;
   33601             :         default:
   33602           0 :                 return GF_BAD_PARAM;
   33603             :         }
   33604           0 : }
   33605             : 
   33606             : 
   33607             : static s32 MultiTexture_get_field_index_by_name(char *name)
   33608             : {
   33609           0 :         if (!strcmp("alpha", name)) return 0;
   33610           0 :         if (!strcmp("color", name)) return 1;
   33611           0 :         if (!strcmp("function", name)) return 2;
   33612           0 :         if (!strcmp("mode", name)) return 3;
   33613           0 :         if (!strcmp("source", name)) return 4;
   33614           0 :         if (!strcmp("texture", name)) return 5;
   33615           0 :         if (!strcmp("cameraVector", name)) return 6;
   33616           0 :         if (!strcmp("transparent", name)) return 7;
   33617           0 :         return -1;
   33618           0 : }
   33619             : static Bool MultiTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33620             : {
   33621             :         switch (FieldIndex) {
   33622             :         default:
   33623           0 :                 return 0;
   33624             :         }
   33625             : }
   33626             : 
   33627             : 
   33628             : 
   33629             : GF_Node *MultiTexture_Create()
   33630             : {
   33631             :         M_MultiTexture *p;
   33632           0 :         GF_SAFEALLOC(p, M_MultiTexture);
   33633           0 :         if(!p) return NULL;
   33634           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MultiTexture);
   33635             : 
   33636             :         /*default field values*/
   33637           0 :         p->alpha = FLT2FIX(1);
   33638           0 :         p->color.red = FLT2FIX(1);
   33639           0 :         p->color.green = FLT2FIX(1);
   33640           0 :         p->color.blue = FLT2FIX(1);
   33641           0 :         return (GF_Node *)p;
   33642           0 : }
   33643             : 
   33644             : 
   33645             : /*
   33646             :         PointTextureV2 Node deletion
   33647             : */
   33648             : 
   33649             : static void PointTextureV2_Del(GF_Node *node)
   33650             : {
   33651           0 :         M_PointTextureV2 *p = (M_PointTextureV2 *) node;
   33652           0 :         gf_sg_mfcolor_del(p->color);
   33653           0 :         gf_sg_mfint32_del(p->depth);
   33654           0 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
   33655           0 :         gf_sg_mfvec3f_del(p->splatU);
   33656           0 :         gf_sg_mfvec3f_del(p->splatV);
   33657           0 :         gf_node_free((GF_Node *) p);
   33658           0 : }
   33659             : 
   33660             : static const u16 PointTextureV2_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33661             : 
   33662             : static u32 PointTextureV2_get_field_count(GF_Node *node, u8 IndexMode)
   33663             : {
   33664           0 :         switch(IndexMode) {
   33665             :         case GF_SG_FIELD_CODING_IN:
   33666           0 :                 return 0;
   33667             :         case GF_SG_FIELD_CODING_DEF:
   33668           0 :                 return 8;
   33669             :         case GF_SG_FIELD_CODING_OUT:
   33670           0 :                 return 0;
   33671             :         case GF_SG_FIELD_CODING_DYN:
   33672           0 :                 return 0;
   33673             :         default:
   33674           0 :                 return 8;
   33675             :         }
   33676           0 : }
   33677             : 
   33678             : static GF_Err PointTextureV2_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33679             : {
   33680           0 :         switch(IndexMode) {
   33681             :         case GF_SG_FIELD_CODING_DEF:
   33682           0 :                 *allField = PointTextureV2_Def2All[inField];
   33683           0 :                 return GF_OK;
   33684             :         default:
   33685           0 :                 return GF_BAD_PARAM;
   33686             :         }
   33687           0 : }
   33688             : static GF_Err PointTextureV2_get_field(GF_Node *node, GF_FieldInfo *info)
   33689             : {
   33690           0 :         switch (info->fieldIndex) {
   33691             :         case 0:
   33692           0 :                 info->name = "color";
   33693           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33694           0 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   33695           0 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->color;
   33696           0 :                 return GF_OK;
   33697             :         case 1:
   33698           0 :                 info->name = "depth";
   33699           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33700           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33701           0 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->depth;
   33702           0 :                 return GF_OK;
   33703             :         case 2:
   33704           0 :                 info->name = "depthNbBits";
   33705           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33706           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33707           0 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->depthNbBits;
   33708           0 :                 return GF_OK;
   33709             :         case 3:
   33710           0 :                 info->name = "height";
   33711           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33712           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33713           0 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->height;
   33714           0 :                 return GF_OK;
   33715             :         case 4:
   33716           0 :                 info->name = "normal";
   33717           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33718           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   33719           0 :                 info->NDTtype = NDT_SFNormalNode;
   33720           0 :                 info->far_ptr = & ((M_PointTextureV2 *)node)->normal;
   33721           0 :                 return GF_OK;
   33722             :         case 5:
   33723           0 :                 info->name = "splatU";
   33724           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33725           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   33726           0 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->splatU;
   33727           0 :                 return GF_OK;
   33728             :         case 6:
   33729           0 :                 info->name = "splatV";
   33730           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33731           0 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   33732           0 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->splatV;
   33733           0 :                 return GF_OK;
   33734             :         case 7:
   33735           0 :                 info->name = "width";
   33736           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   33737           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33738           0 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->width;
   33739           0 :                 return GF_OK;
   33740             :         default:
   33741           0 :                 return GF_BAD_PARAM;
   33742             :         }
   33743           0 : }
   33744             : 
   33745             : 
   33746             : static s32 PointTextureV2_get_field_index_by_name(char *name)
   33747             : {
   33748           0 :         if (!strcmp("color", name)) return 0;
   33749           0 :         if (!strcmp("depth", name)) return 1;
   33750           0 :         if (!strcmp("depthNbBits", name)) return 2;
   33751           0 :         if (!strcmp("height", name)) return 3;
   33752           0 :         if (!strcmp("normal", name)) return 4;
   33753           0 :         if (!strcmp("splatU", name)) return 5;
   33754           0 :         if (!strcmp("splatV", name)) return 6;
   33755           0 :         if (!strcmp("width", name)) return 7;
   33756           0 :         return -1;
   33757           0 : }
   33758             : static Bool PointTextureV2_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33759             : {
   33760           0 :         switch (FieldIndex) {
   33761             :         case 2:
   33762           0 :                 *AType = 0;
   33763           0 :                 *QType = 13;
   33764           0 :                 *QT13_bits = 5;
   33765           0 :                 *b_min = FLT2FIX(0);
   33766           0 :                 *b_max = FLT2FIX(31);
   33767           0 :                 return 1;
   33768             :         case 5:
   33769           0 :                 *AType = 0;
   33770           0 :                 *QType = 1;
   33771           0 :                 *b_min = FIX_MIN;
   33772           0 :                 *b_max = FIX_MAX;
   33773           0 :                 return 1;
   33774             :         case 6:
   33775           0 :                 *AType = 0;
   33776           0 :                 *QType = 1;
   33777           0 :                 *b_min = FIX_MIN;
   33778           0 :                 *b_max = FIX_MAX;
   33779           0 :                 return 1;
   33780             :         default:
   33781           0 :                 return 0;
   33782             :         }
   33783           0 : }
   33784             : 
   33785             : 
   33786             : 
   33787             : GF_Node *PointTextureV2_Create()
   33788             : {
   33789             :         M_PointTextureV2 *p;
   33790           0 :         GF_SAFEALLOC(p, M_PointTextureV2);
   33791           0 :         if(!p) return NULL;
   33792           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointTextureV2);
   33793             : 
   33794             :         /*default field values*/
   33795           0 :         p->depthNbBits = 7;
   33796           0 :         p->height = 256;
   33797           0 :         p->width = 256;
   33798           0 :         return (GF_Node *)p;
   33799           0 : }
   33800             : 
   33801             : 
   33802             : /*
   33803             :         SBVCAnimationV2 Node deletion
   33804             : */
   33805             : 
   33806             : static void SBVCAnimationV2_Del(GF_Node *node)
   33807             : {
   33808           0 :         M_SBVCAnimationV2 *p = (M_SBVCAnimationV2 *) node;
   33809           0 :         gf_sg_mfint32_del(p->activeUrlIndex);
   33810           0 :         gf_sg_mfurl_del(p->url);
   33811           0 :         gf_node_unregister_children((GF_Node *) p, p->virtualCharacters);
   33812           0 :         gf_node_free((GF_Node *) p);
   33813           0 : }
   33814             : 
   33815             : static const u16 SBVCAnimationV2_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33816             : static const u16 SBVCAnimationV2_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33817             : static const u16 SBVCAnimationV2_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   33818             : static const u16 SBVCAnimationV2_Dyn2All[] = { 2, 5};
   33819             : 
   33820             : static u32 SBVCAnimationV2_get_field_count(GF_Node *node, u8 IndexMode)
   33821             : {
   33822           0 :         switch(IndexMode) {
   33823             :         case GF_SG_FIELD_CODING_IN:
   33824           0 :                 return 8;
   33825             :         case GF_SG_FIELD_CODING_DEF:
   33826           0 :                 return 8;
   33827             :         case GF_SG_FIELD_CODING_OUT:
   33828           0 :                 return 10;
   33829             :         case GF_SG_FIELD_CODING_DYN:
   33830           0 :                 return 2;
   33831             :         default:
   33832           0 :                 return 10;
   33833             :         }
   33834           0 : }
   33835             : 
   33836             : static GF_Err SBVCAnimationV2_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33837             : {
   33838           0 :         switch(IndexMode) {
   33839             :         case GF_SG_FIELD_CODING_IN:
   33840           0 :                 *allField = SBVCAnimationV2_In2All[inField];
   33841           0 :                 return GF_OK;
   33842             :         case GF_SG_FIELD_CODING_DEF:
   33843           0 :                 *allField = SBVCAnimationV2_Def2All[inField];
   33844           0 :                 return GF_OK;
   33845             :         case GF_SG_FIELD_CODING_OUT:
   33846           0 :                 *allField = SBVCAnimationV2_Out2All[inField];
   33847           0 :                 return GF_OK;
   33848             :         case GF_SG_FIELD_CODING_DYN:
   33849           0 :                 *allField = SBVCAnimationV2_Dyn2All[inField];
   33850           0 :                 return GF_OK;
   33851             :         default:
   33852           0 :                 return GF_BAD_PARAM;
   33853             :         }
   33854           0 : }
   33855             : static GF_Err SBVCAnimationV2_get_field(GF_Node *node, GF_FieldInfo *info)
   33856             : {
   33857           0 :         switch (info->fieldIndex) {
   33858             :         case 0:
   33859           0 :                 info->name = "activeUrlIndex";
   33860           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33861           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33862           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->activeUrlIndex;
   33863           0 :                 return GF_OK;
   33864             :         case 1:
   33865           0 :                 info->name = "loop";
   33866           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33867           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   33868           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->loop;
   33869           0 :                 return GF_OK;
   33870             :         case 2:
   33871           0 :                 info->name = "speed";
   33872           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33873           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33874           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->speed;
   33875           0 :                 return GF_OK;
   33876             :         case 3:
   33877           0 :                 info->name = "startTime";
   33878           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33879           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   33880           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->startTime;
   33881           0 :                 return GF_OK;
   33882             :         case 4:
   33883           0 :                 info->name = "stopTime";
   33884           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33885           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   33886           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->stopTime;
   33887           0 :                 return GF_OK;
   33888             :         case 5:
   33889           0 :                 info->name = "transitionTime";
   33890           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33891           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33892           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->transitionTime;
   33893           0 :                 return GF_OK;
   33894             :         case 6:
   33895           0 :                 info->name = "url";
   33896           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33897           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   33898           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->url;
   33899           0 :                 return GF_OK;
   33900             :         case 7:
   33901           0 :                 info->name = "virtualCharacters";
   33902           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33903           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   33904           0 :                 info->NDTtype = NDT_SF3DNode;
   33905           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *)node)->virtualCharacters;
   33906           0 :                 return GF_OK;
   33907             :         case 8:
   33908           0 :                 info->name = "duration_changed";
   33909           0 :                 info->eventType = GF_SG_EVENT_OUT;
   33910           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   33911           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->duration_changed;
   33912           0 :                 return GF_OK;
   33913             :         case 9:
   33914           0 :                 info->name = "isActive";
   33915           0 :                 info->eventType = GF_SG_EVENT_OUT;
   33916           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   33917           0 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->isActive;
   33918           0 :                 return GF_OK;
   33919             :         default:
   33920           0 :                 return GF_BAD_PARAM;
   33921             :         }
   33922           0 : }
   33923             : 
   33924             : 
   33925             : static s32 SBVCAnimationV2_get_field_index_by_name(char *name)
   33926             : {
   33927           0 :         if (!strcmp("activeUrlIndex", name)) return 0;
   33928           0 :         if (!strcmp("loop", name)) return 1;
   33929           0 :         if (!strcmp("speed", name)) return 2;
   33930           0 :         if (!strcmp("startTime", name)) return 3;
   33931           0 :         if (!strcmp("stopTime", name)) return 4;
   33932           0 :         if (!strcmp("transitionTime", name)) return 5;
   33933           0 :         if (!strcmp("url", name)) return 6;
   33934           0 :         if (!strcmp("virtualCharacters", name)) return 7;
   33935           0 :         if (!strcmp("duration_changed", name)) return 8;
   33936           0 :         if (!strcmp("isActive", name)) return 9;
   33937           0 :         return -1;
   33938           0 : }
   33939             : static Bool SBVCAnimationV2_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33940             : {
   33941           0 :         switch (FieldIndex) {
   33942             :         case 2:
   33943           0 :                 *AType = 7;
   33944           0 :                 *QType = 0;
   33945           0 :                 *b_min = FIX_MIN;
   33946           0 :                 *b_max = FIX_MAX;
   33947           0 :                 return 1;
   33948             :         case 5:
   33949           0 :                 *AType = 7;
   33950           0 :                 *QType = 0;
   33951           0 :                 *b_min = FLT2FIX(0);
   33952           0 :                 *b_max = FIX_MAX;
   33953           0 :                 return 1;
   33954             :         default:
   33955           0 :                 return 0;
   33956             :         }
   33957           0 : }
   33958             : 
   33959             : 
   33960             : 
   33961             : GF_Node *SBVCAnimationV2_Create()
   33962             : {
   33963             :         M_SBVCAnimationV2 *p;
   33964           0 :         GF_SAFEALLOC(p, M_SBVCAnimationV2);
   33965           0 :         if(!p) return NULL;
   33966           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBVCAnimationV2);
   33967             : 
   33968             :         /*default field values*/
   33969           0 :         p->speed = FLT2FIX(1.0);
   33970           0 :         p->startTime = 0;
   33971           0 :         p->stopTime = 0;
   33972           0 :         p->transitionTime = FLT2FIX(0);
   33973           0 :         return (GF_Node *)p;
   33974           0 : }
   33975             : 
   33976             : 
   33977             : /*
   33978             :         SimpleTextureV2 Node deletion
   33979             : */
   33980             : 
   33981             : static void SimpleTextureV2_Del(GF_Node *node)
   33982             : {
   33983           0 :         M_SimpleTextureV2 *p = (M_SimpleTextureV2 *) node;
   33984           0 :         gf_node_unregister((GF_Node *) p->depth, (GF_Node *) p);
   33985           0 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
   33986           0 :         gf_node_unregister((GF_Node *) p->splatU, (GF_Node *) p);
   33987           0 :         gf_node_unregister((GF_Node *) p->splatV, (GF_Node *) p);
   33988           0 :         gf_node_unregister((GF_Node *) p->texture, (GF_Node *) p);
   33989           0 :         gf_node_free((GF_Node *) p);
   33990           0 : }
   33991             : 
   33992             : static const u16 SimpleTextureV2_Def2All[] = { 0, 1, 2, 3, 4};
   33993             : 
   33994             : static u32 SimpleTextureV2_get_field_count(GF_Node *node, u8 IndexMode)
   33995             : {
   33996           0 :         switch(IndexMode) {
   33997             :         case GF_SG_FIELD_CODING_IN:
   33998           0 :                 return 0;
   33999             :         case GF_SG_FIELD_CODING_DEF:
   34000           0 :                 return 5;
   34001             :         case GF_SG_FIELD_CODING_OUT:
   34002           0 :                 return 0;
   34003             :         case GF_SG_FIELD_CODING_DYN:
   34004           0 :                 return 0;
   34005             :         default:
   34006           0 :                 return 5;
   34007             :         }
   34008           0 : }
   34009             : 
   34010             : static GF_Err SimpleTextureV2_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34011             : {
   34012           0 :         switch(IndexMode) {
   34013             :         case GF_SG_FIELD_CODING_DEF:
   34014           0 :                 *allField = SimpleTextureV2_Def2All[inField];
   34015           0 :                 return GF_OK;
   34016             :         default:
   34017           0 :                 return GF_BAD_PARAM;
   34018             :         }
   34019           0 : }
   34020             : static GF_Err SimpleTextureV2_get_field(GF_Node *node, GF_FieldInfo *info)
   34021             : {
   34022           0 :         switch (info->fieldIndex) {
   34023             :         case 0:
   34024           0 :                 info->name = "depth";
   34025           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   34026           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34027           0 :                 info->NDTtype = NDT_SFTextureNode;
   34028           0 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->depth;
   34029           0 :                 return GF_OK;
   34030             :         case 1:
   34031           0 :                 info->name = "normal";
   34032           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   34033           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34034           0 :                 info->NDTtype = NDT_SFTextureNode;
   34035           0 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->normal;
   34036           0 :                 return GF_OK;
   34037             :         case 2:
   34038           0 :                 info->name = "splatU";
   34039           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   34040           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34041           0 :                 info->NDTtype = NDT_SFTextureNode;
   34042           0 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->splatU;
   34043           0 :                 return GF_OK;
   34044             :         case 3:
   34045           0 :                 info->name = "splatV";
   34046           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   34047           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34048           0 :                 info->NDTtype = NDT_SFTextureNode;
   34049           0 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->splatV;
   34050           0 :                 return GF_OK;
   34051             :         case 4:
   34052           0 :                 info->name = "texture";
   34053           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   34054           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34055           0 :                 info->NDTtype = NDT_SFTextureNode;
   34056           0 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->texture;
   34057           0 :                 return GF_OK;
   34058             :         default:
   34059           0 :                 return GF_BAD_PARAM;
   34060             :         }
   34061           0 : }
   34062             : 
   34063             : 
   34064             : static s32 SimpleTextureV2_get_field_index_by_name(char *name)
   34065             : {
   34066           0 :         if (!strcmp("depth", name)) return 0;
   34067           0 :         if (!strcmp("normal", name)) return 1;
   34068           0 :         if (!strcmp("splatU", name)) return 2;
   34069           0 :         if (!strcmp("splatV", name)) return 3;
   34070           0 :         if (!strcmp("texture", name)) return 4;
   34071           0 :         return -1;
   34072           0 : }
   34073             : static Bool SimpleTextureV2_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34074             : {
   34075             :         switch (FieldIndex) {
   34076             :         default:
   34077           0 :                 return 0;
   34078             :         }
   34079             : }
   34080             : 
   34081             : 
   34082             : 
   34083             : GF_Node *SimpleTextureV2_Create()
   34084             : {
   34085             :         M_SimpleTextureV2 *p;
   34086           0 :         GF_SAFEALLOC(p, M_SimpleTextureV2);
   34087           0 :         if(!p) return NULL;
   34088           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SimpleTextureV2);
   34089             : 
   34090             :         /*default field values*/
   34091           0 :         return (GF_Node *)p;
   34092           0 : }
   34093             : 
   34094             : 
   34095             : /*
   34096             :         SurroundingSound Node deletion
   34097             : */
   34098             : 
   34099             : static void SurroundingSound_Del(GF_Node *node)
   34100             : {
   34101           0 :         M_SurroundingSound *p = (M_SurroundingSound *) node;
   34102           0 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   34103           0 :         gf_node_free((GF_Node *) p);
   34104           0 : }
   34105             : 
   34106             : static const u16 SurroundingSound_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   34107             : static const u16 SurroundingSound_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   34108             : static const u16 SurroundingSound_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   34109             : static const u16 SurroundingSound_Dyn2All[] = { 1, 3, 5};
   34110             : 
   34111             : static u32 SurroundingSound_get_field_count(GF_Node *node, u8 IndexMode)
   34112             : {
   34113           0 :         switch(IndexMode) {
   34114             :         case GF_SG_FIELD_CODING_IN:
   34115           0 :                 return 7;
   34116             :         case GF_SG_FIELD_CODING_DEF:
   34117           0 :                 return 7;
   34118             :         case GF_SG_FIELD_CODING_OUT:
   34119           0 :                 return 7;
   34120             :         case GF_SG_FIELD_CODING_DYN:
   34121           0 :                 return 3;
   34122             :         default:
   34123           0 :                 return 7;
   34124             :         }
   34125           0 : }
   34126             : 
   34127             : static GF_Err SurroundingSound_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34128             : {
   34129           0 :         switch(IndexMode) {
   34130             :         case GF_SG_FIELD_CODING_IN:
   34131           0 :                 *allField = SurroundingSound_In2All[inField];
   34132           0 :                 return GF_OK;
   34133             :         case GF_SG_FIELD_CODING_DEF:
   34134           0 :                 *allField = SurroundingSound_Def2All[inField];
   34135           0 :                 return GF_OK;
   34136             :         case GF_SG_FIELD_CODING_OUT:
   34137           0 :                 *allField = SurroundingSound_Out2All[inField];
   34138           0 :                 return GF_OK;
   34139             :         case GF_SG_FIELD_CODING_DYN:
   34140           0 :                 *allField = SurroundingSound_Dyn2All[inField];
   34141           0 :                 return GF_OK;
   34142             :         default:
   34143           0 :                 return GF_BAD_PARAM;
   34144             :         }
   34145           0 : }
   34146             : static GF_Err SurroundingSound_get_field(GF_Node *node, GF_FieldInfo *info)
   34147             : {
   34148           0 :         switch (info->fieldIndex) {
   34149             :         case 0:
   34150           0 :                 info->name = "source";
   34151           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34152           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34153           0 :                 info->NDTtype = NDT_SFAudioNode;
   34154           0 :                 info->far_ptr = & ((M_SurroundingSound *)node)->source;
   34155           0 :                 return GF_OK;
   34156             :         case 1:
   34157           0 :                 info->name = "intensity";
   34158           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34159           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34160           0 :                 info->far_ptr = & ((M_SurroundingSound *) node)->intensity;
   34161           0 :                 return GF_OK;
   34162             :         case 2:
   34163           0 :                 info->name = "distance";
   34164           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34165           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34166           0 :                 info->far_ptr = & ((M_SurroundingSound *) node)->distance;
   34167           0 :                 return GF_OK;
   34168             :         case 3:
   34169           0 :                 info->name = "location";
   34170           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34171           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34172           0 :                 info->far_ptr = & ((M_SurroundingSound *) node)->location;
   34173           0 :                 return GF_OK;
   34174             :         case 4:
   34175           0 :                 info->name = "distortionFactor";
   34176           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34177           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34178           0 :                 info->far_ptr = & ((M_SurroundingSound *) node)->distortionFactor;
   34179           0 :                 return GF_OK;
   34180             :         case 5:
   34181           0 :                 info->name = "orientation";
   34182           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34183           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   34184           0 :                 info->far_ptr = & ((M_SurroundingSound *) node)->orientation;
   34185           0 :                 return GF_OK;
   34186             :         case 6:
   34187           0 :                 info->name = "isTransformable";
   34188           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34189           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34190           0 :                 info->far_ptr = & ((M_SurroundingSound *) node)->isTransformable;
   34191           0 :                 return GF_OK;
   34192             :         default:
   34193           0 :                 return GF_BAD_PARAM;
   34194             :         }
   34195           0 : }
   34196             : 
   34197             : 
   34198             : static s32 SurroundingSound_get_field_index_by_name(char *name)
   34199             : {
   34200           0 :         if (!strcmp("source", name)) return 0;
   34201           0 :         if (!strcmp("intensity", name)) return 1;
   34202           0 :         if (!strcmp("distance", name)) return 2;
   34203           0 :         if (!strcmp("location", name)) return 3;
   34204           0 :         if (!strcmp("distortionFactor", name)) return 4;
   34205           0 :         if (!strcmp("orientation", name)) return 5;
   34206           0 :         if (!strcmp("isTransformable", name)) return 6;
   34207           0 :         return -1;
   34208           0 : }
   34209             : static Bool SurroundingSound_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34210             : {
   34211           0 :         switch (FieldIndex) {
   34212             :         case 1:
   34213           0 :                 *AType = 7;
   34214           0 :                 *QType = 0;
   34215           0 :                 *b_min = FLT2FIX(0);
   34216           0 :                 *b_max = FLT2FIX(1);
   34217           0 :                 return 1;
   34218             :         case 2:
   34219           0 :                 *AType = 0;
   34220           0 :                 *QType = 0;
   34221           0 :                 *b_min = FLT2FIX(0);
   34222           0 :                 *b_max = FIX_MAX;
   34223           0 :                 return 1;
   34224             :         case 3:
   34225           0 :                 *AType = 1;
   34226           0 :                 *QType = 1;
   34227           0 :                 *b_min = FIX_MIN;
   34228           0 :                 *b_max = FIX_MAX;
   34229           0 :                 return 1;
   34230             :         case 5:
   34231           0 :                 *AType = 10;
   34232           0 :                 *QType = 10;
   34233           0 :                 *b_min = FIX_MIN;
   34234           0 :                 *b_max = FIX_MAX;
   34235           0 :                 return 1;
   34236             :         default:
   34237           0 :                 return 0;
   34238             :         }
   34239           0 : }
   34240             : 
   34241             : 
   34242             : 
   34243             : GF_Node *SurroundingSound_Create()
   34244             : {
   34245             :         M_SurroundingSound *p;
   34246           0 :         GF_SAFEALLOC(p, M_SurroundingSound);
   34247           0 :         if(!p) return NULL;
   34248           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SurroundingSound);
   34249             : 
   34250             :         /*default field values*/
   34251           0 :         p->intensity = FLT2FIX(1.0);
   34252           0 :         p->distance = FLT2FIX(0.0);
   34253           0 :         p->location.x = FLT2FIX(0.0);
   34254           0 :         p->location.y = FLT2FIX(0.0);
   34255           0 :         p->location.z = FLT2FIX(0.0);
   34256           0 :         p->distortionFactor = FLT2FIX(0.0);
   34257           0 :         p->orientation.x = FLT2FIX(0.0);
   34258           0 :         p->orientation.y = FLT2FIX(0.0);
   34259           0 :         p->orientation.z = FLT2FIX(1.0);
   34260           0 :         p->orientation.q = FLT2FIX(0.0);
   34261           0 :         p->isTransformable = 1;
   34262           0 :         return (GF_Node *)p;
   34263           0 : }
   34264             : 
   34265             : 
   34266             : /*
   34267             :         Transform3DAudio Node deletion
   34268             : */
   34269             : 
   34270             : static void Transform3DAudio_Del(GF_Node *node)
   34271             : {
   34272           0 :         M_Transform3DAudio *p = (M_Transform3DAudio *) node;
   34273           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   34274           0 :         gf_node_free((GF_Node *) p);
   34275           0 : }
   34276             : 
   34277             : static const u16 Transform3DAudio_Def2All[] = { 2, 3, 4, 5, 6, 7, 8};
   34278             : static const u16 Transform3DAudio_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   34279             : static const u16 Transform3DAudio_Out2All[] = { 2, 3, 4, 5, 6, 7, 8};
   34280             : static const u16 Transform3DAudio_Dyn2All[] = { 3, 4, 5, 6, 7};
   34281             : 
   34282             : static u32 Transform3DAudio_get_field_count(GF_Node *node, u8 IndexMode)
   34283             : {
   34284           0 :         switch(IndexMode) {
   34285             :         case GF_SG_FIELD_CODING_IN:
   34286           0 :                 return 9;
   34287             :         case GF_SG_FIELD_CODING_DEF:
   34288           0 :                 return 7;
   34289             :         case GF_SG_FIELD_CODING_OUT:
   34290           0 :                 return 7;
   34291             :         case GF_SG_FIELD_CODING_DYN:
   34292           0 :                 return 5;
   34293             :         default:
   34294           0 :                 return 9;
   34295             :         }
   34296           0 : }
   34297             : 
   34298             : static GF_Err Transform3DAudio_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34299             : {
   34300           0 :         switch(IndexMode) {
   34301             :         case GF_SG_FIELD_CODING_IN:
   34302           0 :                 *allField = Transform3DAudio_In2All[inField];
   34303           0 :                 return GF_OK;
   34304             :         case GF_SG_FIELD_CODING_DEF:
   34305           0 :                 *allField = Transform3DAudio_Def2All[inField];
   34306           0 :                 return GF_OK;
   34307             :         case GF_SG_FIELD_CODING_OUT:
   34308           0 :                 *allField = Transform3DAudio_Out2All[inField];
   34309           0 :                 return GF_OK;
   34310             :         case GF_SG_FIELD_CODING_DYN:
   34311           0 :                 *allField = Transform3DAudio_Dyn2All[inField];
   34312           0 :                 return GF_OK;
   34313             :         default:
   34314           0 :                 return GF_BAD_PARAM;
   34315             :         }
   34316           0 : }
   34317             : static GF_Err Transform3DAudio_get_field(GF_Node *node, GF_FieldInfo *info)
   34318             : {
   34319           0 :         switch (info->fieldIndex) {
   34320             :         case 0:
   34321           0 :                 info->name = "addChildren";
   34322           0 :                 info->eventType = GF_SG_EVENT_IN;
   34323           0 :                 info->on_event_in = ((M_Transform3DAudio *)node)->on_addChildren;
   34324           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   34325           0 :                 info->NDTtype = NDT_SF3DNode;
   34326           0 :                 info->far_ptr = & ((M_Transform3DAudio *)node)->addChildren;
   34327           0 :                 return GF_OK;
   34328             :         case 1:
   34329           0 :                 info->name = "removeChildren";
   34330           0 :                 info->eventType = GF_SG_EVENT_IN;
   34331           0 :                 info->on_event_in = ((M_Transform3DAudio *)node)->on_removeChildren;
   34332           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   34333           0 :                 info->NDTtype = NDT_SF3DNode;
   34334           0 :                 info->far_ptr = & ((M_Transform3DAudio *)node)->removeChildren;
   34335           0 :                 return GF_OK;
   34336             :         case 2:
   34337           0 :                 info->name = "children";
   34338           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34339           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   34340           0 :                 info->NDTtype = NDT_SF3DNode;
   34341           0 :                 info->far_ptr = & ((M_Transform3DAudio *)node)->children;
   34342           0 :                 return GF_OK;
   34343             :         case 3:
   34344           0 :                 info->name = "thirdCenterCoordinate";
   34345           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34346           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34347           0 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->thirdCenterCoordinate;
   34348           0 :                 return GF_OK;
   34349             :         case 4:
   34350           0 :                 info->name = "rotationVector";
   34351           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34352           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34353           0 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->rotationVector;
   34354           0 :                 return GF_OK;
   34355             :         case 5:
   34356           0 :                 info->name = "thirdScaleCoordinate";
   34357           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34358           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34359           0 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->thirdScaleCoordinate;
   34360           0 :                 return GF_OK;
   34361             :         case 6:
   34362           0 :                 info->name = "scaleOrientationVector";
   34363           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34364           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34365           0 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->scaleOrientationVector;
   34366           0 :                 return GF_OK;
   34367             :         case 7:
   34368           0 :                 info->name = "thirdTranslationCoordinate";
   34369           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34370           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34371           0 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->thirdTranslationCoordinate;
   34372           0 :                 return GF_OK;
   34373             :         case 8:
   34374           0 :                 info->name = "coordinateTransform";
   34375           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34376           0 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   34377           0 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->coordinateTransform;
   34378           0 :                 return GF_OK;
   34379             :         default:
   34380           0 :                 return GF_BAD_PARAM;
   34381             :         }
   34382           0 : }
   34383             : 
   34384             : 
   34385             : static s32 Transform3DAudio_get_field_index_by_name(char *name)
   34386             : {
   34387           0 :         if (!strcmp("addChildren", name)) return 0;
   34388           0 :         if (!strcmp("removeChildren", name)) return 1;
   34389           0 :         if (!strcmp("children", name)) return 2;
   34390           0 :         if (!strcmp("thirdCenterCoordinate", name)) return 3;
   34391           0 :         if (!strcmp("rotationVector", name)) return 4;
   34392           0 :         if (!strcmp("thirdScaleCoordinate", name)) return 5;
   34393           0 :         if (!strcmp("scaleOrientationVector", name)) return 6;
   34394           0 :         if (!strcmp("thirdTranslationCoordinate", name)) return 7;
   34395           0 :         if (!strcmp("coordinateTransform", name)) return 8;
   34396           0 :         return -1;
   34397           0 : }
   34398             : static Bool Transform3DAudio_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34399             : {
   34400           0 :         switch (FieldIndex) {
   34401             :         case 3:
   34402           0 :                 *AType = 7;
   34403           0 :                 *QType = 0;
   34404           0 :                 *b_min = FIX_MIN;
   34405           0 :                 *b_max = FIX_MAX;
   34406           0 :                 return 1;
   34407             :         case 4:
   34408           0 :                 *AType = 11;
   34409           0 :                 *QType = 7;
   34410           0 :                 *b_min = FLT2FIX(-3.14159265);
   34411           0 :                 *b_max = FLT2FIX(3.14159265);
   34412           0 :                 return 1;
   34413             :         case 5:
   34414           0 :                 *AType = 7;
   34415           0 :                 *QType = 0;
   34416           0 :                 *b_min = FLT2FIX(0);
   34417           0 :                 *b_max = FIX_MAX;
   34418           0 :                 return 1;
   34419             :         case 6:
   34420           0 :                 *AType = 11;
   34421           0 :                 *QType = 7;
   34422           0 :                 *b_min = FLT2FIX(-1);
   34423           0 :                 *b_max = FLT2FIX(1);
   34424           0 :                 return 1;
   34425             :         case 7:
   34426           0 :                 *AType = 7;
   34427           0 :                 *QType = 0;
   34428           0 :                 *b_min = FIX_MIN;
   34429           0 :                 *b_max = FIX_MAX;
   34430           0 :                 return 1;
   34431             :         case 8:
   34432           0 :                 *AType = 0;
   34433           0 :                 *QType = 10;
   34434           0 :                 *b_min = FLT2FIX(-3.14159265);
   34435           0 :                 *b_max = FLT2FIX(3.14159265);
   34436           0 :                 return 1;
   34437             :         default:
   34438           0 :                 return 0;
   34439             :         }
   34440           0 : }
   34441             : 
   34442             : 
   34443             : 
   34444             : GF_Node *Transform3DAudio_Create()
   34445             : {
   34446             :         M_Transform3DAudio *p;
   34447           0 :         GF_SAFEALLOC(p, M_Transform3DAudio);
   34448           0 :         if(!p) return NULL;
   34449           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Transform3DAudio);
   34450           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   34451             : 
   34452             :         /*default field values*/
   34453           0 :         p->thirdCenterCoordinate = FLT2FIX(0.0);
   34454           0 :         p->rotationVector.x = FLT2FIX(0.0);
   34455           0 :         p->rotationVector.y = FLT2FIX(0.0);
   34456           0 :         p->rotationVector.z = FLT2FIX(1.0);
   34457           0 :         p->thirdScaleCoordinate = FLT2FIX(0.0);
   34458           0 :         p->scaleOrientationVector.x = FLT2FIX(0.0);
   34459           0 :         p->scaleOrientationVector.y = FLT2FIX(0.0);
   34460           0 :         p->scaleOrientationVector.z = FLT2FIX(1.0);
   34461           0 :         p->thirdTranslationCoordinate = FLT2FIX(0.0);
   34462           0 :         p->coordinateTransform.x = FLT2FIX(1.0);
   34463           0 :         p->coordinateTransform.y = FLT2FIX(0.0);
   34464           0 :         p->coordinateTransform.z = FLT2FIX(0.0);
   34465           0 :         p->coordinateTransform.q = FLT2FIX(-1.5707963);
   34466           0 :         return (GF_Node *)p;
   34467           0 : }
   34468             : 
   34469             : 
   34470             : /*
   34471             :         WideSound Node deletion
   34472             : */
   34473             : 
   34474             : static void WideSound_Del(GF_Node *node)
   34475             : {
   34476           0 :         M_WideSound *p = (M_WideSound *) node;
   34477           0 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   34478           0 :         gf_node_unregister((GF_Node *) p->perceptualParameters, (GF_Node *) p);
   34479           0 :         gf_sg_mffloat_del(p->size);
   34480           0 :         gf_node_free((GF_Node *) p);
   34481           0 : }
   34482             : 
   34483             : static const u16 WideSound_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   34484             : static const u16 WideSound_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   34485             : static const u16 WideSound_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   34486             : static const u16 WideSound_Dyn2All[] = { 1, 2, 8};
   34487             : 
   34488             : static u32 WideSound_get_field_count(GF_Node *node, u8 IndexMode)
   34489             : {
   34490           0 :         switch(IndexMode) {
   34491             :         case GF_SG_FIELD_CODING_IN:
   34492           0 :                 return 12;
   34493             :         case GF_SG_FIELD_CODING_DEF:
   34494           0 :                 return 15;
   34495             :         case GF_SG_FIELD_CODING_OUT:
   34496           0 :                 return 12;
   34497             :         case GF_SG_FIELD_CODING_DYN:
   34498           0 :                 return 3;
   34499             :         default:
   34500           0 :                 return 15;
   34501             :         }
   34502           0 : }
   34503             : 
   34504             : static GF_Err WideSound_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34505             : {
   34506           0 :         switch(IndexMode) {
   34507             :         case GF_SG_FIELD_CODING_IN:
   34508           0 :                 *allField = WideSound_In2All[inField];
   34509           0 :                 return GF_OK;
   34510             :         case GF_SG_FIELD_CODING_DEF:
   34511           0 :                 *allField = WideSound_Def2All[inField];
   34512           0 :                 return GF_OK;
   34513             :         case GF_SG_FIELD_CODING_OUT:
   34514           0 :                 *allField = WideSound_Out2All[inField];
   34515           0 :                 return GF_OK;
   34516             :         case GF_SG_FIELD_CODING_DYN:
   34517           0 :                 *allField = WideSound_Dyn2All[inField];
   34518           0 :                 return GF_OK;
   34519             :         default:
   34520           0 :                 return GF_BAD_PARAM;
   34521             :         }
   34522           0 : }
   34523             : static GF_Err WideSound_get_field(GF_Node *node, GF_FieldInfo *info)
   34524             : {
   34525           0 :         switch (info->fieldIndex) {
   34526             :         case 0:
   34527           0 :                 info->name = "source";
   34528           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34529           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34530           0 :                 info->NDTtype = NDT_SFAudioNode;
   34531           0 :                 info->far_ptr = & ((M_WideSound *)node)->source;
   34532           0 :                 return GF_OK;
   34533             :         case 1:
   34534           0 :                 info->name = "intensity";
   34535           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34536           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34537           0 :                 info->far_ptr = & ((M_WideSound *) node)->intensity;
   34538           0 :                 return GF_OK;
   34539             :         case 2:
   34540           0 :                 info->name = "location";
   34541           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34542           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34543           0 :                 info->far_ptr = & ((M_WideSound *) node)->location;
   34544           0 :                 return GF_OK;
   34545             :         case 3:
   34546           0 :                 info->name = "spatialize";
   34547           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34548           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34549           0 :                 info->far_ptr = & ((M_WideSound *) node)->spatialize;
   34550           0 :                 return GF_OK;
   34551             :         case 4:
   34552           0 :                 info->name = "perceptualParameters";
   34553           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34554           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34555           0 :                 info->NDTtype = NDT_SFPerceptualParameterNode;
   34556           0 :                 info->far_ptr = & ((M_WideSound *)node)->perceptualParameters;
   34557           0 :                 return GF_OK;
   34558             :         case 5:
   34559           0 :                 info->name = "roomEffect";
   34560           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34561           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34562           0 :                 info->far_ptr = & ((M_WideSound *) node)->roomEffect;
   34563           0 :                 return GF_OK;
   34564             :         case 6:
   34565           0 :                 info->name = "shape";
   34566           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34567           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   34568           0 :                 info->far_ptr = & ((M_WideSound *) node)->shape;
   34569           0 :                 return GF_OK;
   34570             :         case 7:
   34571           0 :                 info->name = "size";
   34572           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34573           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   34574           0 :                 info->far_ptr = & ((M_WideSound *) node)->size;
   34575           0 :                 return GF_OK;
   34576             :         case 8:
   34577           0 :                 info->name = "direction";
   34578           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34579           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34580           0 :                 info->far_ptr = & ((M_WideSound *) node)->direction;
   34581           0 :                 return GF_OK;
   34582             :         case 9:
   34583           0 :                 info->name = "density";
   34584           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34585           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34586           0 :                 info->far_ptr = & ((M_WideSound *) node)->density;
   34587           0 :                 return GF_OK;
   34588             :         case 10:
   34589           0 :                 info->name = "diffuseSelect";
   34590           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34591           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   34592           0 :                 info->far_ptr = & ((M_WideSound *) node)->diffuseSelect;
   34593           0 :                 return GF_OK;
   34594             :         case 11:
   34595           0 :                 info->name = "decorrStrength";
   34596           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34597           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34598           0 :                 info->far_ptr = & ((M_WideSound *) node)->decorrStrength;
   34599           0 :                 return GF_OK;
   34600             :         case 12:
   34601           0 :                 info->name = "speedOfSound";
   34602           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   34603           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34604           0 :                 info->far_ptr = & ((M_WideSound *) node)->speedOfSound;
   34605           0 :                 return GF_OK;
   34606             :         case 13:
   34607           0 :                 info->name = "distance";
   34608           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   34609           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34610           0 :                 info->far_ptr = & ((M_WideSound *) node)->distance;
   34611           0 :                 return GF_OK;
   34612             :         case 14:
   34613           0 :                 info->name = "useAirabs";
   34614           0 :                 info->eventType = GF_SG_EVENT_FIELD;
   34615           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34616           0 :                 info->far_ptr = & ((M_WideSound *) node)->useAirabs;
   34617           0 :                 return GF_OK;
   34618             :         default:
   34619           0 :                 return GF_BAD_PARAM;
   34620             :         }
   34621           0 : }
   34622             : 
   34623             : 
   34624             : static s32 WideSound_get_field_index_by_name(char *name)
   34625             : {
   34626           0 :         if (!strcmp("source", name)) return 0;
   34627           0 :         if (!strcmp("intensity", name)) return 1;
   34628           0 :         if (!strcmp("location", name)) return 2;
   34629           0 :         if (!strcmp("spatialize", name)) return 3;
   34630           0 :         if (!strcmp("perceptualParameters", name)) return 4;
   34631           0 :         if (!strcmp("roomEffect", name)) return 5;
   34632           0 :         if (!strcmp("shape", name)) return 6;
   34633           0 :         if (!strcmp("size", name)) return 7;
   34634           0 :         if (!strcmp("direction", name)) return 8;
   34635           0 :         if (!strcmp("density", name)) return 9;
   34636           0 :         if (!strcmp("diffuseSelect", name)) return 10;
   34637           0 :         if (!strcmp("decorrStrength", name)) return 11;
   34638           0 :         if (!strcmp("speedOfSound", name)) return 12;
   34639           0 :         if (!strcmp("distance", name)) return 13;
   34640           0 :         if (!strcmp("useAirabs", name)) return 14;
   34641           0 :         return -1;
   34642           0 : }
   34643             : static Bool WideSound_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34644             : {
   34645           0 :         switch (FieldIndex) {
   34646             :         case 1:
   34647           0 :                 *AType = 7;
   34648           0 :                 *QType = 0;
   34649           0 :                 *b_min = FLT2FIX(0);
   34650           0 :                 *b_max = FLT2FIX(1);
   34651           0 :                 return 1;
   34652             :         case 2:
   34653           0 :                 *AType = 1;
   34654           0 :                 *QType = 1;
   34655           0 :                 *b_min = FIX_MIN;
   34656           0 :                 *b_max = FIX_MAX;
   34657           0 :                 return 1;
   34658             :         case 6:
   34659           0 :                 *AType = 0;
   34660           0 :                 *QType = 13;
   34661           0 :                 *QT13_bits = 4;
   34662           0 :                 *b_min = FLT2FIX(0);
   34663           0 :                 *b_max = FLT2FIX(4);
   34664           0 :                 return 1;
   34665             :         case 8:
   34666           0 :                 *AType = 9;
   34667           0 :                 *QType = 9;
   34668           0 :                 *b_min = FIX_MIN;
   34669           0 :                 *b_max = FIX_MAX;
   34670           0 :                 return 1;
   34671             :         case 10:
   34672           0 :                 *AType = 0;
   34673           0 :                 *QType = 0;
   34674           0 :                 *b_min = FLT2FIX(0);
   34675           0 :                 *b_max = FIX_MAX;
   34676           0 :                 return 1;
   34677             :         case 12:
   34678           0 :                 *AType = 0;
   34679           0 :                 *QType = 1;
   34680           0 :                 *b_min = FLT2FIX(0);
   34681           0 :                 *b_max = FIX_MAX;
   34682           0 :                 return 1;
   34683             :         case 13:
   34684           0 :                 *AType = 0;
   34685           0 :                 *QType = 0;
   34686           0 :                 *b_min = FLT2FIX(0);
   34687           0 :                 *b_max = FIX_MAX;
   34688           0 :                 return 1;
   34689             :         default:
   34690           0 :                 return 0;
   34691             :         }
   34692           0 : }
   34693             : 
   34694             : 
   34695             : 
   34696             : GF_Node *WideSound_Create()
   34697             : {
   34698             :         M_WideSound *p;
   34699           0 :         GF_SAFEALLOC(p, M_WideSound);
   34700           0 :         if(!p) return NULL;
   34701           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_WideSound);
   34702             : 
   34703             :         /*default field values*/
   34704           0 :         p->intensity = FLT2FIX(1);
   34705           0 :         p->location.x = FLT2FIX(0.0);
   34706           0 :         p->location.y = FLT2FIX(0.0);
   34707           0 :         p->location.z = FLT2FIX(0.0);
   34708           0 :         p->spatialize = 1;
   34709           0 :         p->shape = 0;
   34710           0 :         p->size.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   34711           0 :         p->size.count = 1;
   34712           0 :         p->size.vals[0] = FLT2FIX(0.0);
   34713           0 :         p->direction.x = FLT2FIX(0.0);
   34714           0 :         p->direction.y = FLT2FIX(1.0);
   34715           0 :         p->direction.z = FLT2FIX(0.0);
   34716           0 :         p->density = FLT2FIX(0.5);
   34717           0 :         p->diffuseSelect = 1;
   34718           0 :         p->decorrStrength = FLT2FIX(1.0);
   34719           0 :         p->speedOfSound = FLT2FIX(340.0);
   34720           0 :         p->distance = FLT2FIX(1000.0);
   34721           0 :         return (GF_Node *)p;
   34722           0 : }
   34723             : 
   34724             : 
   34725             : /*
   34726             :         ScoreShape Node deletion
   34727             : */
   34728             : 
   34729             : static void ScoreShape_Del(GF_Node *node)
   34730             : {
   34731           0 :         M_ScoreShape *p = (M_ScoreShape *) node;
   34732           0 :         gf_node_unregister((GF_Node *) p->score, (GF_Node *) p);
   34733           0 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   34734           0 :         gf_node_free((GF_Node *) p);
   34735           0 : }
   34736             : 
   34737             : static const u16 ScoreShape_Def2All[] = { 0, 1};
   34738             : static const u16 ScoreShape_In2All[] = { 0, 1};
   34739             : static const u16 ScoreShape_Out2All[] = { 0, 1};
   34740             : 
   34741             : static u32 ScoreShape_get_field_count(GF_Node *node, u8 IndexMode)
   34742             : {
   34743           0 :         switch(IndexMode) {
   34744             :         case GF_SG_FIELD_CODING_IN:
   34745           0 :                 return 2;
   34746             :         case GF_SG_FIELD_CODING_DEF:
   34747           0 :                 return 2;
   34748             :         case GF_SG_FIELD_CODING_OUT:
   34749           0 :                 return 2;
   34750             :         case GF_SG_FIELD_CODING_DYN:
   34751           0 :                 return 0;
   34752             :         default:
   34753           0 :                 return 2;
   34754             :         }
   34755           0 : }
   34756             : 
   34757             : static GF_Err ScoreShape_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34758             : {
   34759           0 :         switch(IndexMode) {
   34760             :         case GF_SG_FIELD_CODING_IN:
   34761           0 :                 *allField = ScoreShape_In2All[inField];
   34762           0 :                 return GF_OK;
   34763             :         case GF_SG_FIELD_CODING_DEF:
   34764           0 :                 *allField = ScoreShape_Def2All[inField];
   34765           0 :                 return GF_OK;
   34766             :         case GF_SG_FIELD_CODING_OUT:
   34767           0 :                 *allField = ScoreShape_Out2All[inField];
   34768           0 :                 return GF_OK;
   34769             :         default:
   34770           0 :                 return GF_BAD_PARAM;
   34771             :         }
   34772           0 : }
   34773             : static GF_Err ScoreShape_get_field(GF_Node *node, GF_FieldInfo *info)
   34774             : {
   34775           0 :         switch (info->fieldIndex) {
   34776             :         case 0:
   34777           0 :                 info->name = "score";
   34778           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34779           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34780           0 :                 info->NDTtype = NDT_SFMusicScoreNode;
   34781           0 :                 info->far_ptr = & ((M_ScoreShape *)node)->score;
   34782           0 :                 return GF_OK;
   34783             :         case 1:
   34784           0 :                 info->name = "geometry";
   34785           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34786           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34787           0 :                 info->NDTtype = NDT_SF2DNode;
   34788           0 :                 info->far_ptr = & ((M_ScoreShape *)node)->geometry;
   34789           0 :                 return GF_OK;
   34790             :         default:
   34791           0 :                 return GF_BAD_PARAM;
   34792             :         }
   34793           0 : }
   34794             : 
   34795             : 
   34796             : static s32 ScoreShape_get_field_index_by_name(char *name)
   34797             : {
   34798           0 :         if (!strcmp("score", name)) return 0;
   34799           0 :         if (!strcmp("geometry", name)) return 1;
   34800           0 :         return -1;
   34801           0 : }
   34802             : static Bool ScoreShape_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34803             : {
   34804             :         switch (FieldIndex) {
   34805             :         default:
   34806           0 :                 return 0;
   34807             :         }
   34808             : }
   34809             : 
   34810             : 
   34811             : 
   34812             : GF_Node *ScoreShape_Create()
   34813             : {
   34814             :         M_ScoreShape *p;
   34815           0 :         GF_SAFEALLOC(p, M_ScoreShape);
   34816           0 :         if(!p) return NULL;
   34817           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ScoreShape);
   34818             : 
   34819             :         /*default field values*/
   34820           0 :         return (GF_Node *)p;
   34821           0 : }
   34822             : 
   34823             : 
   34824             : /*
   34825             :         MusicScore Node deletion
   34826             : */
   34827             : 
   34828             : static void MusicScore_Del(GF_Node *node)
   34829             : {
   34830           0 :         M_MusicScore *p = (M_MusicScore *) node;
   34831           0 :         gf_sg_sfstring_del(p->gotoLabel);
   34832           0 :         gf_sg_mfstring_del(p->argumentsOnExecute);
   34833           0 :         gf_sg_sfstring_del(p->commandOnExecute);
   34834           0 :         gf_sg_mfstring_del(p->partsLyrics);
   34835           0 :         gf_sg_mfint32_del(p->partsShown);
   34836           0 :         gf_sg_mfurl_del(p->url);
   34837           0 :         gf_sg_mfurl_del(p->urlSA);
   34838           0 :         gf_sg_sfstring_del(p->viewType);
   34839           0 :         gf_sg_sfstring_del(p->activatedLink);
   34840           0 :         gf_sg_mfstring_del(p->availableCommands);
   34841           0 :         gf_sg_mfstring_del(p->availableLabels);
   34842           0 :         gf_sg_mfstring_del(p->availableLyricLanguages);
   34843           0 :         gf_sg_mfstring_del(p->availableViewTypes);
   34844           0 :         gf_sg_mfstring_del(p->partNames);
   34845           0 :         gf_node_free((GF_Node *) p);
   34846           0 : }
   34847             : 
   34848             : static const u16 MusicScore_Def2All[] = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   34849             : static const u16 MusicScore_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   34850             : static const u16 MusicScore_Out2All[] = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
   34851             : static const u16 MusicScore_Dyn2All[] = { 14};
   34852             : 
   34853             : static u32 MusicScore_get_field_count(GF_Node *node, u8 IndexMode)
   34854             : {
   34855           0 :         switch(IndexMode) {
   34856             :         case GF_SG_FIELD_CODING_IN:
   34857           0 :                 return 21;
   34858             :         case GF_SG_FIELD_CODING_DEF:
   34859           0 :                 return 16;
   34860             :         case GF_SG_FIELD_CODING_OUT:
   34861           0 :                 return 26;
   34862             :         case GF_SG_FIELD_CODING_DYN:
   34863           0 :                 return 1;
   34864             :         default:
   34865           0 :                 return 31;
   34866             :         }
   34867           0 : }
   34868             : 
   34869             : static GF_Err MusicScore_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34870             : {
   34871           0 :         switch(IndexMode) {
   34872             :         case GF_SG_FIELD_CODING_IN:
   34873           0 :                 *allField = MusicScore_In2All[inField];
   34874           0 :                 return GF_OK;
   34875             :         case GF_SG_FIELD_CODING_DEF:
   34876           0 :                 *allField = MusicScore_Def2All[inField];
   34877           0 :                 return GF_OK;
   34878             :         case GF_SG_FIELD_CODING_OUT:
   34879           0 :                 *allField = MusicScore_Out2All[inField];
   34880           0 :                 return GF_OK;
   34881             :         case GF_SG_FIELD_CODING_DYN:
   34882           0 :                 *allField = MusicScore_Dyn2All[inField];
   34883           0 :                 return GF_OK;
   34884             :         default:
   34885           0 :                 return GF_BAD_PARAM;
   34886             :         }
   34887           0 : }
   34888             : static GF_Err MusicScore_get_field(GF_Node *node, GF_FieldInfo *info)
   34889             : {
   34890           0 :         switch (info->fieldIndex) {
   34891             :         case 0:
   34892           0 :                 info->name = "executeCommand";
   34893           0 :                 info->eventType = GF_SG_EVENT_IN;
   34894           0 :                 info->on_event_in = ((M_MusicScore *)node)->on_executeCommand;
   34895           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34896           0 :                 info->far_ptr = & ((M_MusicScore *) node)->executeCommand;
   34897           0 :                 return GF_OK;
   34898             :         case 1:
   34899           0 :                 info->name = "gotoLabel";
   34900           0 :                 info->eventType = GF_SG_EVENT_IN;
   34901           0 :                 info->on_event_in = ((M_MusicScore *)node)->on_gotoLabel;
   34902           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   34903           0 :                 info->far_ptr = & ((M_MusicScore *) node)->gotoLabel;
   34904           0 :                 return GF_OK;
   34905             :         case 2:
   34906           0 :                 info->name = "gotoMeasure";
   34907           0 :                 info->eventType = GF_SG_EVENT_IN;
   34908           0 :                 info->on_event_in = ((M_MusicScore *)node)->on_gotoMeasure;
   34909           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   34910           0 :                 info->far_ptr = & ((M_MusicScore *) node)->gotoMeasure;
   34911           0 :                 return GF_OK;
   34912             :         case 3:
   34913           0 :                 info->name = "highlightTimePosition";
   34914           0 :                 info->eventType = GF_SG_EVENT_IN;
   34915           0 :                 info->on_event_in = ((M_MusicScore *)node)->on_highlightTimePosition;
   34916           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   34917           0 :                 info->far_ptr = & ((M_MusicScore *) node)->highlightTimePosition;
   34918           0 :                 return GF_OK;
   34919             :         case 4:
   34920           0 :                 info->name = "mousePosition";
   34921           0 :                 info->eventType = GF_SG_EVENT_IN;
   34922           0 :                 info->on_event_in = ((M_MusicScore *)node)->on_mousePosition;
   34923           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34924           0 :                 info->far_ptr = & ((M_MusicScore *) node)->mousePosition;
   34925           0 :                 return GF_OK;
   34926             :         case 5:
   34927           0 :                 info->name = "argumentsOnExecute";
   34928           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34929           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   34930           0 :                 info->far_ptr = & ((M_MusicScore *) node)->argumentsOnExecute;
   34931           0 :                 return GF_OK;
   34932             :         case 6:
   34933           0 :                 info->name = "commandOnExecute";
   34934           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34935           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   34936           0 :                 info->far_ptr = & ((M_MusicScore *) node)->commandOnExecute;
   34937           0 :                 return GF_OK;
   34938             :         case 7:
   34939           0 :                 info->name = "firstVisibleMeasure";
   34940           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34941           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   34942           0 :                 info->far_ptr = & ((M_MusicScore *) node)->firstVisibleMeasure;
   34943           0 :                 return GF_OK;
   34944             :         case 8:
   34945           0 :                 info->name = "hyperlinkEnable";
   34946           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34947           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34948           0 :                 info->far_ptr = & ((M_MusicScore *) node)->hyperlinkEnable;
   34949           0 :                 return GF_OK;
   34950             :         case 9:
   34951           0 :                 info->name = "loop";
   34952           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34953           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34954           0 :                 info->far_ptr = & ((M_MusicScore *) node)->loop;
   34955           0 :                 return GF_OK;
   34956             :         case 10:
   34957           0 :                 info->name = "partsLyrics";
   34958           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34959           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   34960           0 :                 info->far_ptr = & ((M_MusicScore *) node)->partsLyrics;
   34961           0 :                 return GF_OK;
   34962             :         case 11:
   34963           0 :                 info->name = "partsShown";
   34964           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34965           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   34966           0 :                 info->far_ptr = & ((M_MusicScore *) node)->partsShown;
   34967           0 :                 return GF_OK;
   34968             :         case 12:
   34969           0 :                 info->name = "scoreOffset";
   34970           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34971           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   34972           0 :                 info->far_ptr = & ((M_MusicScore *) node)->scoreOffset;
   34973           0 :                 return GF_OK;
   34974             :         case 13:
   34975           0 :                 info->name = "size";
   34976           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34977           0 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   34978           0 :                 info->far_ptr = & ((M_MusicScore *) node)->size;
   34979           0 :                 return GF_OK;
   34980             :         case 14:
   34981           0 :                 info->name = "speed";
   34982           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34983           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34984           0 :                 info->far_ptr = & ((M_MusicScore *) node)->speed;
   34985           0 :                 return GF_OK;
   34986             :         case 15:
   34987           0 :                 info->name = "startTime";
   34988           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34989           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   34990           0 :                 info->far_ptr = & ((M_MusicScore *) node)->startTime;
   34991           0 :                 return GF_OK;
   34992             :         case 16:
   34993           0 :                 info->name = "stopTime";
   34994           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34995           0 :                 info->fieldType = GF_SG_VRML_SFTIME;
   34996           0 :                 info->far_ptr = & ((M_MusicScore *) node)->stopTime;
   34997           0 :                 return GF_OK;
   34998             :         case 17:
   34999           0 :                 info->name = "transpose";
   35000           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35001           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35002           0 :                 info->far_ptr = & ((M_MusicScore *) node)->transpose;
   35003           0 :                 return GF_OK;
   35004             :         case 18:
   35005           0 :                 info->name = "url";
   35006           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35007           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   35008           0 :                 info->far_ptr = & ((M_MusicScore *) node)->url;
   35009           0 :                 return GF_OK;
   35010             :         case 19:
   35011           0 :                 info->name = "urlSA";
   35012           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35013           0 :                 info->fieldType = GF_SG_VRML_MFURL;
   35014           0 :                 info->far_ptr = & ((M_MusicScore *) node)->urlSA;
   35015           0 :                 return GF_OK;
   35016             :         case 20:
   35017           0 :                 info->name = "viewType";
   35018           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35019           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   35020           0 :                 info->far_ptr = & ((M_MusicScore *) node)->viewType;
   35021           0 :                 return GF_OK;
   35022             :         case 21:
   35023           0 :                 info->name = "activatedLink";
   35024           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35025           0 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   35026           0 :                 info->far_ptr = & ((M_MusicScore *) node)->activatedLink;
   35027           0 :                 return GF_OK;
   35028             :         case 22:
   35029           0 :                 info->name = "availableCommands";
   35030           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35031           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35032           0 :                 info->far_ptr = & ((M_MusicScore *) node)->availableCommands;
   35033           0 :                 return GF_OK;
   35034             :         case 23:
   35035           0 :                 info->name = "availableLabels";
   35036           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35037           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35038           0 :                 info->far_ptr = & ((M_MusicScore *) node)->availableLabels;
   35039           0 :                 return GF_OK;
   35040             :         case 24:
   35041           0 :                 info->name = "availableLyricLanguages";
   35042           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35043           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35044           0 :                 info->far_ptr = & ((M_MusicScore *) node)->availableLyricLanguages;
   35045           0 :                 return GF_OK;
   35046             :         case 25:
   35047           0 :                 info->name = "availableViewTypes";
   35048           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35049           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35050           0 :                 info->far_ptr = & ((M_MusicScore *) node)->availableViewTypes;
   35051           0 :                 return GF_OK;
   35052             :         case 26:
   35053           0 :                 info->name = "isActive";
   35054           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35055           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35056           0 :                 info->far_ptr = & ((M_MusicScore *) node)->isActive;
   35057           0 :                 return GF_OK;
   35058             :         case 27:
   35059           0 :                 info->name = "highlightPosition";
   35060           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35061           0 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   35062           0 :                 info->far_ptr = & ((M_MusicScore *) node)->highlightPosition;
   35063           0 :                 return GF_OK;
   35064             :         case 28:
   35065           0 :                 info->name = "lastVisibleMeasure";
   35066           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35067           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35068           0 :                 info->far_ptr = & ((M_MusicScore *) node)->lastVisibleMeasure;
   35069           0 :                 return GF_OK;
   35070             :         case 29:
   35071           0 :                 info->name = "numMeasures";
   35072           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35073           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35074           0 :                 info->far_ptr = & ((M_MusicScore *) node)->numMeasures;
   35075           0 :                 return GF_OK;
   35076             :         case 30:
   35077           0 :                 info->name = "partNames";
   35078           0 :                 info->eventType = GF_SG_EVENT_OUT;
   35079           0 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35080           0 :                 info->far_ptr = & ((M_MusicScore *) node)->partNames;
   35081           0 :                 return GF_OK;
   35082             :         default:
   35083           0 :                 return GF_BAD_PARAM;
   35084             :         }
   35085           0 : }
   35086             : 
   35087             : 
   35088             : static s32 MusicScore_get_field_index_by_name(char *name)
   35089             : {
   35090           0 :         if (!strcmp("executeCommand", name)) return 0;
   35091           0 :         if (!strcmp("gotoLabel", name)) return 1;
   35092           0 :         if (!strcmp("gotoMeasure", name)) return 2;
   35093           0 :         if (!strcmp("highlightTimePosition", name)) return 3;
   35094           0 :         if (!strcmp("mousePosition", name)) return 4;
   35095           0 :         if (!strcmp("argumentsOnExecute", name)) return 5;
   35096           0 :         if (!strcmp("commandOnExecute", name)) return 6;
   35097           0 :         if (!strcmp("firstVisibleMeasure", name)) return 7;
   35098           0 :         if (!strcmp("hyperlinkEnable", name)) return 8;
   35099           0 :         if (!strcmp("loop", name)) return 9;
   35100           0 :         if (!strcmp("partsLyrics", name)) return 10;
   35101           0 :         if (!strcmp("partsShown", name)) return 11;
   35102           0 :         if (!strcmp("scoreOffset", name)) return 12;
   35103           0 :         if (!strcmp("size", name)) return 13;
   35104           0 :         if (!strcmp("speed", name)) return 14;
   35105           0 :         if (!strcmp("startTime", name)) return 15;
   35106           0 :         if (!strcmp("stopTime", name)) return 16;
   35107           0 :         if (!strcmp("transpose", name)) return 17;
   35108           0 :         if (!strcmp("url", name)) return 18;
   35109           0 :         if (!strcmp("urlSA", name)) return 19;
   35110           0 :         if (!strcmp("viewType", name)) return 20;
   35111           0 :         if (!strcmp("activatedLink", name)) return 21;
   35112           0 :         if (!strcmp("availableCommands", name)) return 22;
   35113           0 :         if (!strcmp("availableLabels", name)) return 23;
   35114           0 :         if (!strcmp("availableLyricLanguages", name)) return 24;
   35115           0 :         if (!strcmp("availableViewTypes", name)) return 25;
   35116           0 :         if (!strcmp("isActive", name)) return 26;
   35117           0 :         if (!strcmp("highlightPosition", name)) return 27;
   35118           0 :         if (!strcmp("lastVisibleMeasure", name)) return 28;
   35119           0 :         if (!strcmp("numMeasures", name)) return 29;
   35120           0 :         if (!strcmp("partNames", name)) return 30;
   35121           0 :         return -1;
   35122           0 : }
   35123             : static Bool MusicScore_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35124             : {
   35125           0 :         switch (FieldIndex) {
   35126             :         case 14:
   35127           0 :                 *AType = 7;
   35128           0 :                 *QType = 0;
   35129           0 :                 *b_min = FIX_MIN;
   35130           0 :                 *b_max = FIX_MAX;
   35131           0 :                 return 1;
   35132             :         default:
   35133           0 :                 return 0;
   35134             :         }
   35135           0 : }
   35136             : 
   35137             : 
   35138             : 
   35139             : GF_Node *MusicScore_Create()
   35140             : {
   35141             :         M_MusicScore *p;
   35142           0 :         GF_SAFEALLOC(p, M_MusicScore);
   35143           0 :         if(!p) return NULL;
   35144           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MusicScore);
   35145             : 
   35146             :         /*default field values*/
   35147           0 :         p->firstVisibleMeasure = 0;
   35148           0 :         p->hyperlinkEnable = 1;
   35149           0 :         p->scoreOffset = 0.0;
   35150           0 :         p->size.x = FLT2FIX(-1);
   35151           0 :         p->size.y = FLT2FIX(-1);
   35152           0 :         p->speed = FLT2FIX(1.0);
   35153           0 :         p->startTime = 0;
   35154           0 :         p->stopTime = 0;
   35155           0 :         p->transpose = FLT2FIX(0.0);
   35156           0 :         return (GF_Node *)p;
   35157           0 : }
   35158             : 
   35159             : 
   35160             : /*
   35161             :         FootPrintSetNode Node deletion
   35162             : */
   35163             : 
   35164             : static void FootPrintSetNode_Del(GF_Node *node)
   35165             : {
   35166           0 :         M_FootPrintSetNode *p = (M_FootPrintSetNode *) node;
   35167           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   35168           0 :         gf_node_free((GF_Node *) p);
   35169           0 : }
   35170             : 
   35171             : static const u16 FootPrintSetNode_Def2All[] = { 0};
   35172             : static const u16 FootPrintSetNode_In2All[] = { 0};
   35173             : static const u16 FootPrintSetNode_Out2All[] = { 0};
   35174             : 
   35175             : static u32 FootPrintSetNode_get_field_count(GF_Node *node, u8 IndexMode)
   35176             : {
   35177           0 :         switch(IndexMode) {
   35178             :         case GF_SG_FIELD_CODING_IN:
   35179           0 :                 return 1;
   35180             :         case GF_SG_FIELD_CODING_DEF:
   35181           0 :                 return 1;
   35182             :         case GF_SG_FIELD_CODING_OUT:
   35183           0 :                 return 1;
   35184             :         case GF_SG_FIELD_CODING_DYN:
   35185           0 :                 return 0;
   35186             :         default:
   35187           0 :                 return 1;
   35188             :         }
   35189           0 : }
   35190             : 
   35191             : static GF_Err FootPrintSetNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35192             : {
   35193           0 :         switch(IndexMode) {
   35194             :         case GF_SG_FIELD_CODING_IN:
   35195           0 :                 *allField = FootPrintSetNode_In2All[inField];
   35196           0 :                 return GF_OK;
   35197             :         case GF_SG_FIELD_CODING_DEF:
   35198           0 :                 *allField = FootPrintSetNode_Def2All[inField];
   35199           0 :                 return GF_OK;
   35200             :         case GF_SG_FIELD_CODING_OUT:
   35201           0 :                 *allField = FootPrintSetNode_Out2All[inField];
   35202           0 :                 return GF_OK;
   35203             :         default:
   35204           0 :                 return GF_BAD_PARAM;
   35205             :         }
   35206           0 : }
   35207             : static GF_Err FootPrintSetNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35208             : {
   35209           0 :         switch (info->fieldIndex) {
   35210             :         case 0:
   35211           0 :                 info->name = "children";
   35212           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35213           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35214           0 :                 info->NDTtype = NDT_SFGeometryNode;
   35215           0 :                 info->far_ptr = & ((M_FootPrintSetNode *)node)->children;
   35216           0 :                 return GF_OK;
   35217             :         default:
   35218           0 :                 return GF_BAD_PARAM;
   35219             :         }
   35220           0 : }
   35221             : 
   35222             : 
   35223             : static s32 FootPrintSetNode_get_field_index_by_name(char *name)
   35224             : {
   35225           0 :         if (!strcmp("children", name)) return 0;
   35226           0 :         return -1;
   35227           0 : }
   35228             : static Bool FootPrintSetNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35229             : {
   35230             :         switch (FieldIndex) {
   35231             :         default:
   35232           0 :                 return 0;
   35233             :         }
   35234             : }
   35235             : 
   35236             : 
   35237             : 
   35238             : GF_Node *FootPrintSetNode_Create()
   35239             : {
   35240             :         M_FootPrintSetNode *p;
   35241           0 :         GF_SAFEALLOC(p, M_FootPrintSetNode);
   35242           0 :         if(!p) return NULL;
   35243           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FootPrintSetNode);
   35244           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   35245             : 
   35246             :         /*default field values*/
   35247           0 :         return (GF_Node *)p;
   35248           0 : }
   35249             : 
   35250             : 
   35251             : /*
   35252             :         FootPrintNode Node deletion
   35253             : */
   35254             : 
   35255             : static void FootPrintNode_Del(GF_Node *node)
   35256             : {
   35257           0 :         M_FootPrintNode *p = (M_FootPrintNode *) node;
   35258           0 :         gf_node_unregister((GF_Node *) p->footprint, (GF_Node *) p);
   35259           0 :         gf_node_free((GF_Node *) p);
   35260           0 : }
   35261             : 
   35262             : static const u16 FootPrintNode_Def2All[] = { 0, 1};
   35263             : static const u16 FootPrintNode_In2All[] = { 0, 1};
   35264             : static const u16 FootPrintNode_Out2All[] = { 0, 1};
   35265             : 
   35266             : static u32 FootPrintNode_get_field_count(GF_Node *node, u8 IndexMode)
   35267             : {
   35268           0 :         switch(IndexMode) {
   35269             :         case GF_SG_FIELD_CODING_IN:
   35270           0 :                 return 2;
   35271             :         case GF_SG_FIELD_CODING_DEF:
   35272           0 :                 return 2;
   35273             :         case GF_SG_FIELD_CODING_OUT:
   35274           0 :                 return 2;
   35275             :         case GF_SG_FIELD_CODING_DYN:
   35276           0 :                 return 0;
   35277             :         default:
   35278           0 :                 return 2;
   35279             :         }
   35280           0 : }
   35281             : 
   35282             : static GF_Err FootPrintNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35283             : {
   35284           0 :         switch(IndexMode) {
   35285             :         case GF_SG_FIELD_CODING_IN:
   35286           0 :                 *allField = FootPrintNode_In2All[inField];
   35287           0 :                 return GF_OK;
   35288             :         case GF_SG_FIELD_CODING_DEF:
   35289           0 :                 *allField = FootPrintNode_Def2All[inField];
   35290           0 :                 return GF_OK;
   35291             :         case GF_SG_FIELD_CODING_OUT:
   35292           0 :                 *allField = FootPrintNode_Out2All[inField];
   35293           0 :                 return GF_OK;
   35294             :         default:
   35295           0 :                 return GF_BAD_PARAM;
   35296             :         }
   35297           0 : }
   35298             : static GF_Err FootPrintNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35299             : {
   35300           0 :         switch (info->fieldIndex) {
   35301             :         case 0:
   35302           0 :                 info->name = "index";
   35303           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35304           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35305           0 :                 info->far_ptr = & ((M_FootPrintNode *) node)->index;
   35306           0 :                 return GF_OK;
   35307             :         case 1:
   35308           0 :                 info->name = "footprint";
   35309           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35310           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   35311           0 :                 info->NDTtype = NDT_SFGeometryNode;
   35312           0 :                 info->far_ptr = & ((M_FootPrintNode *)node)->footprint;
   35313           0 :                 return GF_OK;
   35314             :         default:
   35315           0 :                 return GF_BAD_PARAM;
   35316             :         }
   35317           0 : }
   35318             : 
   35319             : 
   35320             : static s32 FootPrintNode_get_field_index_by_name(char *name)
   35321             : {
   35322           0 :         if (!strcmp("index", name)) return 0;
   35323           0 :         if (!strcmp("footprint", name)) return 1;
   35324           0 :         return -1;
   35325           0 : }
   35326             : static Bool FootPrintNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35327             : {
   35328             :         switch (FieldIndex) {
   35329             :         default:
   35330           0 :                 return 0;
   35331             :         }
   35332             : }
   35333             : 
   35334             : 
   35335             : 
   35336             : GF_Node *FootPrintNode_Create()
   35337             : {
   35338             :         M_FootPrintNode *p;
   35339           0 :         GF_SAFEALLOC(p, M_FootPrintNode);
   35340           0 :         if(!p) return NULL;
   35341           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FootPrintNode);
   35342             : 
   35343             :         /*default field values*/
   35344           0 :         p->index = -1;
   35345           0 :         return (GF_Node *)p;
   35346           0 : }
   35347             : 
   35348             : 
   35349             : /*
   35350             :         BuildingPartNode Node deletion
   35351             : */
   35352             : 
   35353             : static void BuildingPartNode_Del(GF_Node *node)
   35354             : {
   35355           0 :         M_BuildingPartNode *p = (M_BuildingPartNode *) node;
   35356           0 :         gf_node_unregister((GF_Node *) p->footprint, (GF_Node *) p);
   35357           0 :         gf_node_unregister_children((GF_Node *) p, p->alternativeGeometry);
   35358           0 :         gf_node_unregister_children((GF_Node *) p, p->roofs);
   35359           0 :         gf_node_unregister_children((GF_Node *) p, p->facades);
   35360           0 :         gf_node_free((GF_Node *) p);
   35361           0 : }
   35362             : 
   35363             : static const u16 BuildingPartNode_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   35364             : static const u16 BuildingPartNode_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   35365             : static const u16 BuildingPartNode_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   35366             : 
   35367             : static u32 BuildingPartNode_get_field_count(GF_Node *node, u8 IndexMode)
   35368             : {
   35369           0 :         switch(IndexMode) {
   35370             :         case GF_SG_FIELD_CODING_IN:
   35371           0 :                 return 8;
   35372             :         case GF_SG_FIELD_CODING_DEF:
   35373           0 :                 return 8;
   35374             :         case GF_SG_FIELD_CODING_OUT:
   35375           0 :                 return 8;
   35376             :         case GF_SG_FIELD_CODING_DYN:
   35377           0 :                 return 0;
   35378             :         default:
   35379           0 :                 return 8;
   35380             :         }
   35381           0 : }
   35382             : 
   35383             : static GF_Err BuildingPartNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35384             : {
   35385           0 :         switch(IndexMode) {
   35386             :         case GF_SG_FIELD_CODING_IN:
   35387           0 :                 *allField = BuildingPartNode_In2All[inField];
   35388           0 :                 return GF_OK;
   35389             :         case GF_SG_FIELD_CODING_DEF:
   35390           0 :                 *allField = BuildingPartNode_Def2All[inField];
   35391           0 :                 return GF_OK;
   35392             :         case GF_SG_FIELD_CODING_OUT:
   35393           0 :                 *allField = BuildingPartNode_Out2All[inField];
   35394           0 :                 return GF_OK;
   35395             :         default:
   35396           0 :                 return GF_BAD_PARAM;
   35397             :         }
   35398           0 : }
   35399             : static GF_Err BuildingPartNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35400             : {
   35401           0 :         switch (info->fieldIndex) {
   35402             :         case 0:
   35403           0 :                 info->name = "index";
   35404           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35405           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35406           0 :                 info->far_ptr = & ((M_BuildingPartNode *) node)->index;
   35407           0 :                 return GF_OK;
   35408             :         case 1:
   35409           0 :                 info->name = "footprint";
   35410           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35411           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   35412           0 :                 info->NDTtype = NDT_SFGeometryNode;
   35413           0 :                 info->far_ptr = & ((M_BuildingPartNode *)node)->footprint;
   35414           0 :                 return GF_OK;
   35415             :         case 2:
   35416           0 :                 info->name = "buildingIndex";
   35417           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35418           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35419           0 :                 info->far_ptr = & ((M_BuildingPartNode *) node)->buildingIndex;
   35420           0 :                 return GF_OK;
   35421             :         case 3:
   35422           0 :                 info->name = "height";
   35423           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35424           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35425           0 :                 info->far_ptr = & ((M_BuildingPartNode *) node)->height;
   35426           0 :                 return GF_OK;
   35427             :         case 4:
   35428           0 :                 info->name = "altitude";
   35429           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35430           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35431           0 :                 info->far_ptr = & ((M_BuildingPartNode *) node)->altitude;
   35432           0 :                 return GF_OK;
   35433             :         case 5:
   35434           0 :                 info->name = "alternativeGeometry";
   35435           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35436           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35437           0 :                 info->NDTtype = NDT_SFGeometryNode;
   35438           0 :                 info->far_ptr = & ((M_BuildingPartNode *)node)->alternativeGeometry;
   35439           0 :                 return GF_OK;
   35440             :         case 6:
   35441           0 :                 info->name = "roofs";
   35442           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35443           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35444           0 :                 info->NDTtype = NDT_SFGeometryNode;
   35445           0 :                 info->far_ptr = & ((M_BuildingPartNode *)node)->roofs;
   35446           0 :                 return GF_OK;
   35447             :         case 7:
   35448           0 :                 info->name = "facades";
   35449           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35450           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35451           0 :                 info->NDTtype = NDT_SFGeometryNode;
   35452           0 :                 info->far_ptr = & ((M_BuildingPartNode *)node)->facades;
   35453           0 :                 return GF_OK;
   35454             :         default:
   35455           0 :                 return GF_BAD_PARAM;
   35456             :         }
   35457           0 : }
   35458             : 
   35459             : 
   35460             : static s32 BuildingPartNode_get_field_index_by_name(char *name)
   35461             : {
   35462           0 :         if (!strcmp("index", name)) return 0;
   35463           0 :         if (!strcmp("footprint", name)) return 1;
   35464           0 :         if (!strcmp("buildingIndex", name)) return 2;
   35465           0 :         if (!strcmp("height", name)) return 3;
   35466           0 :         if (!strcmp("altitude", name)) return 4;
   35467           0 :         if (!strcmp("alternativeGeometry", name)) return 5;
   35468           0 :         if (!strcmp("roofs", name)) return 6;
   35469           0 :         if (!strcmp("facades", name)) return 7;
   35470           0 :         return -1;
   35471           0 : }
   35472             : static Bool BuildingPartNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35473             : {
   35474             :         switch (FieldIndex) {
   35475             :         default:
   35476           0 :                 return 0;
   35477             :         }
   35478             : }
   35479             : 
   35480             : 
   35481             : 
   35482             : GF_Node *BuildingPartNode_Create()
   35483             : {
   35484             :         M_BuildingPartNode *p;
   35485           0 :         GF_SAFEALLOC(p, M_BuildingPartNode);
   35486           0 :         if(!p) return NULL;
   35487           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BuildingPartNode);
   35488             : 
   35489             :         /*default field values*/
   35490           0 :         p->index = -1;
   35491           0 :         p->buildingIndex = -1;
   35492           0 :         p->height = FLT2FIX(0);
   35493           0 :         p->altitude = FLT2FIX(0);
   35494           0 :         return (GF_Node *)p;
   35495           0 : }
   35496             : 
   35497             : 
   35498             : /*
   35499             :         RoofNode Node deletion
   35500             : */
   35501             : 
   35502             : static void RoofNode_Del(GF_Node *node)
   35503             : {
   35504           0 :         M_RoofNode *p = (M_RoofNode *) node;
   35505           0 :         gf_sg_mffloat_del(p->SlopeAngle);
   35506           0 :         gf_sg_sfurl_del(p->RoofTextureURL);
   35507           0 :         gf_node_free((GF_Node *) p);
   35508           0 : }
   35509             : 
   35510             : static const u16 RoofNode_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   35511             : static const u16 RoofNode_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   35512             : static const u16 RoofNode_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   35513             : 
   35514             : static u32 RoofNode_get_field_count(GF_Node *node, u8 IndexMode)
   35515             : {
   35516           0 :         switch(IndexMode) {
   35517             :         case GF_SG_FIELD_CODING_IN:
   35518           0 :                 return 12;
   35519             :         case GF_SG_FIELD_CODING_DEF:
   35520           0 :                 return 12;
   35521             :         case GF_SG_FIELD_CODING_OUT:
   35522           0 :                 return 12;
   35523             :         case GF_SG_FIELD_CODING_DYN:
   35524           0 :                 return 0;
   35525             :         default:
   35526           0 :                 return 12;
   35527             :         }
   35528           0 : }
   35529             : 
   35530             : static GF_Err RoofNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35531             : {
   35532           0 :         switch(IndexMode) {
   35533             :         case GF_SG_FIELD_CODING_IN:
   35534           0 :                 *allField = RoofNode_In2All[inField];
   35535           0 :                 return GF_OK;
   35536             :         case GF_SG_FIELD_CODING_DEF:
   35537           0 :                 *allField = RoofNode_Def2All[inField];
   35538           0 :                 return GF_OK;
   35539             :         case GF_SG_FIELD_CODING_OUT:
   35540           0 :                 *allField = RoofNode_Out2All[inField];
   35541           0 :                 return GF_OK;
   35542             :         default:
   35543           0 :                 return GF_BAD_PARAM;
   35544             :         }
   35545           0 : }
   35546             : static GF_Err RoofNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35547             : {
   35548           0 :         switch (info->fieldIndex) {
   35549             :         case 0:
   35550           0 :                 info->name = "Type";
   35551           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35552           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35553           0 :                 info->far_ptr = & ((M_RoofNode *) node)->Type;
   35554           0 :                 return GF_OK;
   35555             :         case 1:
   35556           0 :                 info->name = "Height";
   35557           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35558           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35559           0 :                 info->far_ptr = & ((M_RoofNode *) node)->Height;
   35560           0 :                 return GF_OK;
   35561             :         case 2:
   35562           0 :                 info->name = "SlopeAngle";
   35563           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35564           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   35565           0 :                 info->far_ptr = & ((M_RoofNode *) node)->SlopeAngle;
   35566           0 :                 return GF_OK;
   35567             :         case 3:
   35568           0 :                 info->name = "EaveProjection";
   35569           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35570           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35571           0 :                 info->far_ptr = & ((M_RoofNode *) node)->EaveProjection;
   35572           0 :                 return GF_OK;
   35573             :         case 4:
   35574           0 :                 info->name = "EdgeSupportIndex";
   35575           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35576           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35577           0 :                 info->far_ptr = & ((M_RoofNode *) node)->EdgeSupportIndex;
   35578           0 :                 return GF_OK;
   35579             :         case 5:
   35580           0 :                 info->name = "RoofTextureURL";
   35581           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35582           0 :                 info->fieldType = GF_SG_VRML_SFURL;
   35583           0 :                 info->far_ptr = & ((M_RoofNode *) node)->RoofTextureURL;
   35584           0 :                 return GF_OK;
   35585             :         case 6:
   35586           0 :                 info->name = "IsGenericTexture";
   35587           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35588           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35589           0 :                 info->far_ptr = & ((M_RoofNode *) node)->IsGenericTexture;
   35590           0 :                 return GF_OK;
   35591             :         case 7:
   35592           0 :                 info->name = "TextureXScale";
   35593           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35594           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35595           0 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureXScale;
   35596           0 :                 return GF_OK;
   35597             :         case 8:
   35598           0 :                 info->name = "TextureYScale";
   35599           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35600           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35601           0 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureYScale;
   35602           0 :                 return GF_OK;
   35603             :         case 9:
   35604           0 :                 info->name = "TextureXPosition";
   35605           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35606           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35607           0 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureXPosition;
   35608           0 :                 return GF_OK;
   35609             :         case 10:
   35610           0 :                 info->name = "TextureYPosition";
   35611           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35612           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35613           0 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureYPosition;
   35614           0 :                 return GF_OK;
   35615             :         case 11:
   35616           0 :                 info->name = "TextureRotation";
   35617           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35618           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35619           0 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureRotation;
   35620           0 :                 return GF_OK;
   35621             :         default:
   35622           0 :                 return GF_BAD_PARAM;
   35623             :         }
   35624           0 : }
   35625             : 
   35626             : 
   35627             : static s32 RoofNode_get_field_index_by_name(char *name)
   35628             : {
   35629           0 :         if (!strcmp("Type", name)) return 0;
   35630           0 :         if (!strcmp("Height", name)) return 1;
   35631           0 :         if (!strcmp("SlopeAngle", name)) return 2;
   35632           0 :         if (!strcmp("EaveProjection", name)) return 3;
   35633           0 :         if (!strcmp("EdgeSupportIndex", name)) return 4;
   35634           0 :         if (!strcmp("RoofTextureURL", name)) return 5;
   35635           0 :         if (!strcmp("IsGenericTexture", name)) return 6;
   35636           0 :         if (!strcmp("TextureXScale", name)) return 7;
   35637           0 :         if (!strcmp("TextureYScale", name)) return 8;
   35638           0 :         if (!strcmp("TextureXPosition", name)) return 9;
   35639           0 :         if (!strcmp("TextureYPosition", name)) return 10;
   35640           0 :         if (!strcmp("TextureRotation", name)) return 11;
   35641           0 :         return -1;
   35642           0 : }
   35643             : static Bool RoofNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35644             : {
   35645             :         switch (FieldIndex) {
   35646             :         default:
   35647           0 :                 return 0;
   35648             :         }
   35649             : }
   35650             : 
   35651             : 
   35652             : 
   35653             : GF_Node *RoofNode_Create()
   35654             : {
   35655             :         M_RoofNode *p;
   35656           0 :         GF_SAFEALLOC(p, M_RoofNode);
   35657           0 :         if(!p) return NULL;
   35658           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_RoofNode);
   35659             : 
   35660             :         /*default field values*/
   35661           0 :         p->Type = 0;
   35662           0 :         p->Height = FLT2FIX(0.0);
   35663           0 :         p->SlopeAngle.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   35664           0 :         p->SlopeAngle.count = 1;
   35665           0 :         p->SlopeAngle.vals[0] = FLT2FIX(0.0);
   35666           0 :         p->EaveProjection = FLT2FIX(0.0);
   35667           0 :         p->EdgeSupportIndex = -1;
   35668           0 :         p->IsGenericTexture = 1;
   35669           0 :         p->TextureXScale = FLT2FIX(1.0);
   35670           0 :         p->TextureYScale = FLT2FIX(1.0);
   35671           0 :         p->TextureXPosition = FLT2FIX(0.0);
   35672           0 :         p->TextureYPosition = FLT2FIX(0.0);
   35673           0 :         p->TextureRotation = FLT2FIX(0.0);
   35674           0 :         return (GF_Node *)p;
   35675           0 : }
   35676             : 
   35677             : 
   35678             : /*
   35679             :         FacadeNode Node deletion
   35680             : */
   35681             : 
   35682             : static void FacadeNode_Del(GF_Node *node)
   35683             : {
   35684           0 :         M_FacadeNode *p = (M_FacadeNode *) node;
   35685           0 :         gf_sg_sfurl_del(p->FacadePrimitive);
   35686           0 :         gf_sg_mfint32_del(p->NbFacadeCellsByStorey);
   35687           0 :         gf_sg_mffloat_del(p->StoreyHeight);
   35688           0 :         gf_node_unregister_children((GF_Node *) p, p->FacadeCellsArray);
   35689           0 :         gf_node_free((GF_Node *) p);
   35690           0 : }
   35691             : 
   35692             : static const u16 FacadeNode_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   35693             : static const u16 FacadeNode_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   35694             : static const u16 FacadeNode_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   35695             : 
   35696             : static u32 FacadeNode_get_field_count(GF_Node *node, u8 IndexMode)
   35697             : {
   35698           0 :         switch(IndexMode) {
   35699             :         case GF_SG_FIELD_CODING_IN:
   35700           0 :                 return 13;
   35701             :         case GF_SG_FIELD_CODING_DEF:
   35702           0 :                 return 13;
   35703             :         case GF_SG_FIELD_CODING_OUT:
   35704           0 :                 return 13;
   35705             :         case GF_SG_FIELD_CODING_DYN:
   35706           0 :                 return 0;
   35707             :         default:
   35708           0 :                 return 13;
   35709             :         }
   35710           0 : }
   35711             : 
   35712             : static GF_Err FacadeNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35713             : {
   35714           0 :         switch(IndexMode) {
   35715             :         case GF_SG_FIELD_CODING_IN:
   35716           0 :                 *allField = FacadeNode_In2All[inField];
   35717           0 :                 return GF_OK;
   35718             :         case GF_SG_FIELD_CODING_DEF:
   35719           0 :                 *allField = FacadeNode_Def2All[inField];
   35720           0 :                 return GF_OK;
   35721             :         case GF_SG_FIELD_CODING_OUT:
   35722           0 :                 *allField = FacadeNode_Out2All[inField];
   35723           0 :                 return GF_OK;
   35724             :         default:
   35725           0 :                 return GF_BAD_PARAM;
   35726             :         }
   35727           0 : }
   35728             : static GF_Err FacadeNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35729             : {
   35730           0 :         switch (info->fieldIndex) {
   35731             :         case 0:
   35732           0 :                 info->name = "WidthRatio";
   35733           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35734           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35735           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->WidthRatio;
   35736           0 :                 return GF_OK;
   35737             :         case 1:
   35738           0 :                 info->name = "XScale";
   35739           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35740           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35741           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->XScale;
   35742           0 :                 return GF_OK;
   35743             :         case 2:
   35744           0 :                 info->name = "YScale";
   35745           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35746           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35747           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->YScale;
   35748           0 :                 return GF_OK;
   35749             :         case 3:
   35750           0 :                 info->name = "XPosition";
   35751           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35752           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35753           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->XPosition;
   35754           0 :                 return GF_OK;
   35755             :         case 4:
   35756           0 :                 info->name = "YPosition";
   35757           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35758           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35759           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->YPosition;
   35760           0 :                 return GF_OK;
   35761             :         case 5:
   35762           0 :                 info->name = "XRepeatInterval";
   35763           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35764           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35765           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->XRepeatInterval;
   35766           0 :                 return GF_OK;
   35767             :         case 6:
   35768           0 :                 info->name = "YRepeatInterval";
   35769           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35770           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35771           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->YRepeatInterval;
   35772           0 :                 return GF_OK;
   35773             :         case 7:
   35774           0 :                 info->name = "Repeat";
   35775           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35776           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35777           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->Repeat;
   35778           0 :                 return GF_OK;
   35779             :         case 8:
   35780           0 :                 info->name = "FacadePrimitive";
   35781           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35782           0 :                 info->fieldType = GF_SG_VRML_SFURL;
   35783           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->FacadePrimitive;
   35784           0 :                 return GF_OK;
   35785             :         case 9:
   35786           0 :                 info->name = "NbStories";
   35787           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35788           0 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35789           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->NbStories;
   35790           0 :                 return GF_OK;
   35791             :         case 10:
   35792           0 :                 info->name = "NbFacadeCellsByStorey";
   35793           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35794           0 :                 info->fieldType = GF_SG_VRML_MFINT32;
   35795           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->NbFacadeCellsByStorey;
   35796           0 :                 return GF_OK;
   35797             :         case 11:
   35798           0 :                 info->name = "StoreyHeight";
   35799           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35800           0 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   35801           0 :                 info->far_ptr = & ((M_FacadeNode *) node)->StoreyHeight;
   35802           0 :                 return GF_OK;
   35803             :         case 12:
   35804           0 :                 info->name = "FacadeCellsArray";
   35805           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35806           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35807           0 :                 info->NDTtype = NDT_SFGeometryNode;
   35808           0 :                 info->far_ptr = & ((M_FacadeNode *)node)->FacadeCellsArray;
   35809           0 :                 return GF_OK;
   35810             :         default:
   35811           0 :                 return GF_BAD_PARAM;
   35812             :         }
   35813           0 : }
   35814             : 
   35815             : 
   35816             : static s32 FacadeNode_get_field_index_by_name(char *name)
   35817             : {
   35818           0 :         if (!strcmp("WidthRatio", name)) return 0;
   35819           0 :         if (!strcmp("XScale", name)) return 1;
   35820           0 :         if (!strcmp("YScale", name)) return 2;
   35821           0 :         if (!strcmp("XPosition", name)) return 3;
   35822           0 :         if (!strcmp("YPosition", name)) return 4;
   35823           0 :         if (!strcmp("XRepeatInterval", name)) return 5;
   35824           0 :         if (!strcmp("YRepeatInterval", name)) return 6;
   35825           0 :         if (!strcmp("Repeat", name)) return 7;
   35826           0 :         if (!strcmp("FacadePrimitive", name)) return 8;
   35827           0 :         if (!strcmp("NbStories", name)) return 9;
   35828           0 :         if (!strcmp("NbFacadeCellsByStorey", name)) return 10;
   35829           0 :         if (!strcmp("StoreyHeight", name)) return 11;
   35830           0 :         if (!strcmp("FacadeCellsArray", name)) return 12;
   35831           0 :         return -1;
   35832           0 : }
   35833             : static Bool FacadeNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35834             : {
   35835             :         switch (FieldIndex) {
   35836             :         default:
   35837           0 :                 return 0;
   35838             :         }
   35839             : }
   35840             : 
   35841             : 
   35842             : 
   35843             : GF_Node *FacadeNode_Create()
   35844             : {
   35845             :         M_FacadeNode *p;
   35846           0 :         GF_SAFEALLOC(p, M_FacadeNode);
   35847           0 :         if(!p) return NULL;
   35848           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FacadeNode);
   35849             : 
   35850             :         /*default field values*/
   35851           0 :         p->WidthRatio = FLT2FIX(1.0);
   35852           0 :         p->XScale = FLT2FIX(1.0);
   35853           0 :         p->YScale = FLT2FIX(1.0);
   35854           0 :         p->XPosition = FLT2FIX(0.0);
   35855           0 :         p->YPosition = FLT2FIX(0.0);
   35856           0 :         p->XRepeatInterval = FLT2FIX(0.0);
   35857           0 :         p->YRepeatInterval = FLT2FIX(0.0);
   35858           0 :         p->NbStories = 0;
   35859           0 :         p->NbFacadeCellsByStorey.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   35860           0 :         p->NbFacadeCellsByStorey.count = 1;
   35861           0 :         p->NbFacadeCellsByStorey.vals[0] = 0;
   35862           0 :         p->StoreyHeight.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   35863           0 :         p->StoreyHeight.count = 1;
   35864           0 :         p->StoreyHeight.vals[0] = FLT2FIX(1.0);
   35865           0 :         return (GF_Node *)p;
   35866           0 : }
   35867             : 
   35868             : 
   35869             : /*
   35870             :         Shadow Node deletion
   35871             : */
   35872             : 
   35873             : static void Shadow_Del(GF_Node *node)
   35874             : {
   35875           0 :         M_Shadow *p = (M_Shadow *) node;
   35876           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   35877           0 :         gf_node_free((GF_Node *) p);
   35878           0 : }
   35879             : 
   35880             : static const u16 Shadow_Def2All[] = { 2, 3, 4, 5, 6};
   35881             : static const u16 Shadow_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   35882             : static const u16 Shadow_Out2All[] = { 2, 3, 4, 5, 6};
   35883             : 
   35884             : static u32 Shadow_get_field_count(GF_Node *node, u8 IndexMode)
   35885             : {
   35886           0 :         switch(IndexMode) {
   35887             :         case GF_SG_FIELD_CODING_IN:
   35888           0 :                 return 7;
   35889             :         case GF_SG_FIELD_CODING_DEF:
   35890           0 :                 return 5;
   35891             :         case GF_SG_FIELD_CODING_OUT:
   35892           0 :                 return 5;
   35893             :         case GF_SG_FIELD_CODING_DYN:
   35894           0 :                 return 0;
   35895             :         default:
   35896           0 :                 return 7;
   35897             :         }
   35898           0 : }
   35899             : 
   35900             : static GF_Err Shadow_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35901             : {
   35902           0 :         switch(IndexMode) {
   35903             :         case GF_SG_FIELD_CODING_IN:
   35904           0 :                 *allField = Shadow_In2All[inField];
   35905           0 :                 return GF_OK;
   35906             :         case GF_SG_FIELD_CODING_DEF:
   35907           0 :                 *allField = Shadow_Def2All[inField];
   35908           0 :                 return GF_OK;
   35909             :         case GF_SG_FIELD_CODING_OUT:
   35910           0 :                 *allField = Shadow_Out2All[inField];
   35911           0 :                 return GF_OK;
   35912             :         default:
   35913           0 :                 return GF_BAD_PARAM;
   35914             :         }
   35915           0 : }
   35916             : static GF_Err Shadow_get_field(GF_Node *node, GF_FieldInfo *info)
   35917             : {
   35918           0 :         switch (info->fieldIndex) {
   35919             :         case 0:
   35920           0 :                 info->name = "addChildren";
   35921           0 :                 info->eventType = GF_SG_EVENT_IN;
   35922           0 :                 info->on_event_in = ((M_Shadow *)node)->on_addChildren;
   35923           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   35924           0 :                 info->NDTtype = NDT_SF3DNode;
   35925           0 :                 info->far_ptr = & ((M_Shadow *)node)->addChildren;
   35926           0 :                 return GF_OK;
   35927             :         case 1:
   35928           0 :                 info->name = "removeChildren";
   35929           0 :                 info->eventType = GF_SG_EVENT_IN;
   35930           0 :                 info->on_event_in = ((M_Shadow *)node)->on_removeChildren;
   35931           0 :                 info->fieldType = GF_SG_VRML_SFNODE;
   35932           0 :                 info->NDTtype = NDT_SF3DNode;
   35933           0 :                 info->far_ptr = & ((M_Shadow *)node)->removeChildren;
   35934           0 :                 return GF_OK;
   35935             :         case 2:
   35936           0 :                 info->name = "children";
   35937           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35938           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35939           0 :                 info->NDTtype = NDT_SF3DNode;
   35940           0 :                 info->far_ptr = & ((M_Shadow *)node)->children;
   35941           0 :                 return GF_OK;
   35942             :         case 3:
   35943           0 :                 info->name = "enabled";
   35944           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35945           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35946           0 :                 info->far_ptr = & ((M_Shadow *) node)->enabled;
   35947           0 :                 return GF_OK;
   35948             :         case 4:
   35949           0 :                 info->name = "cast";
   35950           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35951           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35952           0 :                 info->far_ptr = & ((M_Shadow *) node)->cast;
   35953           0 :                 return GF_OK;
   35954             :         case 5:
   35955           0 :                 info->name = "receive";
   35956           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35957           0 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35958           0 :                 info->far_ptr = & ((M_Shadow *) node)->receive;
   35959           0 :                 return GF_OK;
   35960             :         case 6:
   35961           0 :                 info->name = "penumbra";
   35962           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35963           0 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35964           0 :                 info->far_ptr = & ((M_Shadow *) node)->penumbra;
   35965           0 :                 return GF_OK;
   35966             :         default:
   35967           0 :                 return GF_BAD_PARAM;
   35968             :         }
   35969           0 : }
   35970             : 
   35971             : 
   35972             : static s32 Shadow_get_field_index_by_name(char *name)
   35973             : {
   35974           0 :         if (!strcmp("addChildren", name)) return 0;
   35975           0 :         if (!strcmp("removeChildren", name)) return 1;
   35976           0 :         if (!strcmp("children", name)) return 2;
   35977           0 :         if (!strcmp("enabled", name)) return 3;
   35978           0 :         if (!strcmp("cast", name)) return 4;
   35979           0 :         if (!strcmp("receive", name)) return 5;
   35980           0 :         if (!strcmp("penumbra", name)) return 6;
   35981           0 :         return -1;
   35982           0 : }
   35983             : static Bool Shadow_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35984             : {
   35985             :         switch (FieldIndex) {
   35986             :         default:
   35987           0 :                 return 0;
   35988             :         }
   35989             : }
   35990             : 
   35991             : 
   35992             : 
   35993             : GF_Node *Shadow_Create()
   35994             : {
   35995             :         M_Shadow *p;
   35996           0 :         GF_SAFEALLOC(p, M_Shadow);
   35997           0 :         if(!p) return NULL;
   35998           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Shadow);
   35999           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   36000             : 
   36001             :         /*default field values*/
   36002           0 :         p->enabled = 1;
   36003           0 :         p->cast = 1;
   36004           0 :         p->receive = 1;
   36005           0 :         p->penumbra = FLT2FIX(0);
   36006           0 :         return (GF_Node *)p;
   36007           0 : }
   36008             : 
   36009             : 
   36010             : /*
   36011             :         CacheTexture Node deletion
   36012             : */
   36013             : 
   36014             : static void CacheTexture_Del(GF_Node *node)
   36015             : {
   36016          72 :         M_CacheTexture *p = (M_CacheTexture *) node;
   36017          36 :         gf_sg_sfstring_del(p->decoderSpecificInfo);
   36018          36 :         gf_sg_sfstring_del(p->image);
   36019          36 :         gf_sg_sfstring_del(p->cacheURL);
   36020          36 :         gf_sg_mfurl_del(p->cacheOD);
   36021          46 :         if (p->data) gf_free(p->data);
   36022          36 :         gf_node_free((GF_Node *) p);
   36023          36 : }
   36024             : 
   36025             : static const u16 CacheTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   36026             : 
   36027             : static u32 CacheTexture_get_field_count(GF_Node *node, u8 IndexMode)
   36028             : {
   36029          64 :         switch(IndexMode) {
   36030             :         case GF_SG_FIELD_CODING_IN:
   36031           0 :                 return 0;
   36032             :         case GF_SG_FIELD_CODING_DEF:
   36033          18 :                 return 8;
   36034             :         case GF_SG_FIELD_CODING_OUT:
   36035           0 :                 return 0;
   36036             :         case GF_SG_FIELD_CODING_DYN:
   36037           0 :                 return 0;
   36038             :         default:
   36039          14 :                 return 8;
   36040             :         }
   36041          32 : }
   36042             : 
   36043             : static GF_Err CacheTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36044             : {
   36045         124 :         switch(IndexMode) {
   36046             :         case GF_SG_FIELD_CODING_DEF:
   36047          62 :                 *allField = CacheTexture_Def2All[inField];
   36048          62 :                 return GF_OK;
   36049             :         default:
   36050           0 :                 return GF_BAD_PARAM;
   36051             :         }
   36052          62 : }
   36053             : static GF_Err CacheTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   36054             : {
   36055         748 :         switch (info->fieldIndex) {
   36056             :         case 0:
   36057          66 :                 info->name = "objectTypeIndication";
   36058          66 :                 info->eventType = GF_SG_EVENT_FIELD;
   36059          66 :                 info->fieldType = GF_SG_VRML_SFINT32;
   36060          66 :                 info->far_ptr = & ((M_CacheTexture *) node)->objectTypeIndication;
   36061          66 :                 return GF_OK;
   36062             :         case 1:
   36063          36 :                 info->name = "decoderSpecificInfo";
   36064          36 :                 info->eventType = GF_SG_EVENT_FIELD;
   36065          36 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36066          36 :                 info->far_ptr = & ((M_CacheTexture *) node)->decoderSpecificInfo;
   36067          36 :                 return GF_OK;
   36068             :         case 2:
   36069          62 :                 info->name = "image";
   36070          62 :                 info->eventType = GF_SG_EVENT_FIELD;
   36071          62 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36072          62 :                 info->far_ptr = & ((M_CacheTexture *) node)->image;
   36073          62 :                 return GF_OK;
   36074             :         case 3:
   36075          51 :                 info->name = "cacheURL";
   36076          51 :                 info->eventType = GF_SG_EVENT_FIELD;
   36077          51 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36078          51 :                 info->far_ptr = & ((M_CacheTexture *) node)->cacheURL;
   36079          51 :                 return GF_OK;
   36080             :         case 4:
   36081          36 :                 info->name = "cacheOD";
   36082          36 :                 info->eventType = GF_SG_EVENT_FIELD;
   36083          36 :                 info->fieldType = GF_SG_VRML_MFURL;
   36084          36 :                 info->far_ptr = & ((M_CacheTexture *) node)->cacheOD;
   36085          36 :                 return GF_OK;
   36086             :         case 5:
   36087          51 :                 info->name = "expirationDate";
   36088          51 :                 info->eventType = GF_SG_EVENT_FIELD;
   36089          51 :                 info->fieldType = GF_SG_VRML_SFINT32;
   36090          51 :                 info->far_ptr = & ((M_CacheTexture *) node)->expirationDate;
   36091          51 :                 return GF_OK;
   36092             :         case 6:
   36093          36 :                 info->name = "repeatS";
   36094          36 :                 info->eventType = GF_SG_EVENT_FIELD;
   36095          36 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36096          36 :                 info->far_ptr = & ((M_CacheTexture *) node)->repeatS;
   36097          36 :                 return GF_OK;
   36098             :         case 7:
   36099          36 :                 info->name = "repeatT";
   36100          36 :                 info->eventType = GF_SG_EVENT_FIELD;
   36101          36 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36102          36 :                 info->far_ptr = & ((M_CacheTexture *) node)->repeatT;
   36103          36 :                 return GF_OK;
   36104             :         default:
   36105           0 :                 return GF_BAD_PARAM;
   36106             :         }
   36107         374 : }
   36108             : 
   36109             : 
   36110             : static s32 CacheTexture_get_field_index_by_name(char *name)
   36111             : {
   36112          56 :         if (!strcmp("objectTypeIndication", name)) return 0;
   36113          16 :         if (!strcmp("decoderSpecificInfo", name)) return 1;
   36114          24 :         if (!strcmp("image", name)) return 2;
   36115          12 :         if (!strcmp("cacheURL", name)) return 3;
   36116           4 :         if (!strcmp("cacheOD", name)) return 4;
   36117           8 :         if (!strcmp("expirationDate", name)) return 5;
   36118           0 :         if (!strcmp("repeatS", name)) return 6;
   36119           0 :         if (!strcmp("repeatT", name)) return 7;
   36120           0 :         return -1;
   36121          24 : }
   36122             : static Bool CacheTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36123             : {
   36124             :         switch (FieldIndex) {
   36125             :         default:
   36126           0 :                 return 0;
   36127             :         }
   36128             : }
   36129             : 
   36130             : 
   36131             : 
   36132             : GF_Node *CacheTexture_Create()
   36133             : {
   36134             :         M_CacheTexture *p;
   36135         108 :         GF_SAFEALLOC(p, M_CacheTexture);
   36136          36 :         if(!p) return NULL;
   36137          36 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CacheTexture);
   36138             : 
   36139             :         /*default field values*/
   36140          36 :         p->objectTypeIndication = 0;
   36141          36 :         p->expirationDate = 0;
   36142          36 :         p->repeatS = 1;
   36143          36 :         p->repeatT = 1;
   36144          36 :         return (GF_Node *)p;
   36145          36 : }
   36146             : 
   36147             : 
   36148             : /*
   36149             :         EnvironmentTest Node deletion
   36150             : */
   36151             : 
   36152             : static void EnvironmentTest_Del(GF_Node *node)
   36153             : {
   36154         108 :         M_EnvironmentTest *p = (M_EnvironmentTest *) node;
   36155          54 :         gf_sg_sfstring_del(p->compareValue);
   36156          54 :         gf_sg_sfstring_del(p->parameterValue);
   36157          54 :         gf_node_free((GF_Node *) p);
   36158          54 : }
   36159             : 
   36160             : static const u16 EnvironmentTest_Def2All[] = { 1, 2, 3, 4};
   36161             : static const u16 EnvironmentTest_In2All[] = { 0, 1, 2, 3, 4};
   36162             : static const u16 EnvironmentTest_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8};
   36163             : 
   36164             : static u32 EnvironmentTest_get_field_count(GF_Node *node, u8 IndexMode)
   36165             : {
   36166         150 :         switch(IndexMode) {
   36167             :         case GF_SG_FIELD_CODING_IN:
   36168           0 :                 return 5;
   36169             :         case GF_SG_FIELD_CODING_DEF:
   36170          27 :                 return 4;
   36171             :         case GF_SG_FIELD_CODING_OUT:
   36172          27 :                 return 8;
   36173             :         case GF_SG_FIELD_CODING_DYN:
   36174           0 :                 return 0;
   36175             :         default:
   36176          21 :                 return 9;
   36177             :         }
   36178          75 : }
   36179             : 
   36180             : static GF_Err EnvironmentTest_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36181             : {
   36182         196 :         switch(IndexMode) {
   36183             :         case GF_SG_FIELD_CODING_IN:
   36184           0 :                 *allField = EnvironmentTest_In2All[inField];
   36185           0 :                 return GF_OK;
   36186             :         case GF_SG_FIELD_CODING_DEF:
   36187          39 :                 *allField = EnvironmentTest_Def2All[inField];
   36188          39 :                 return GF_OK;
   36189             :         case GF_SG_FIELD_CODING_OUT:
   36190          59 :                 *allField = EnvironmentTest_Out2All[inField];
   36191          59 :                 return GF_OK;
   36192             :         default:
   36193           0 :                 return GF_BAD_PARAM;
   36194             :         }
   36195          98 : }
   36196             : static GF_Err EnvironmentTest_get_field(GF_Node *node, GF_FieldInfo *info)
   36197             : {
   36198         780 :         switch (info->fieldIndex) {
   36199             :         case 0:
   36200          21 :                 info->name = "evaluate";
   36201          21 :                 info->eventType = GF_SG_EVENT_IN;
   36202          21 :                 info->on_event_in = ((M_EnvironmentTest *)node)->on_evaluate;
   36203          21 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36204          21 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->evaluate;
   36205          21 :                 return GF_OK;
   36206             :         case 1:
   36207          54 :                 info->name = "enabled";
   36208          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36209          54 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36210          54 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->enabled;
   36211          54 :                 return GF_OK;
   36212             :         case 2:
   36213          99 :                 info->name = "parameter";
   36214          99 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36215          99 :                 info->fieldType = GF_SG_VRML_SFINT32;
   36216          99 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->parameter;
   36217          99 :                 return GF_OK;
   36218             :         case 3:
   36219          54 :                 info->name = "compareValue";
   36220          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36221          54 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36222          54 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->compareValue;
   36223          54 :                 return GF_OK;
   36224             :         case 4:
   36225          54 :                 info->name = "evaluateOnChange";
   36226          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36227          54 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36228          54 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->evaluateOnChange;
   36229          54 :                 return GF_OK;
   36230             :         case 5:
   36231          21 :                 info->name = "valueLarger";
   36232          21 :                 info->eventType = GF_SG_EVENT_OUT;
   36233          21 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36234          21 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->valueLarger;
   36235          21 :                 return GF_OK;
   36236             :         case 6:
   36237          29 :                 info->name = "valueEqual";
   36238          29 :                 info->eventType = GF_SG_EVENT_OUT;
   36239          29 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36240          29 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->valueEqual;
   36241          29 :                 return GF_OK;
   36242             :         case 7:
   36243          21 :                 info->name = "valueSmaller";
   36244          21 :                 info->eventType = GF_SG_EVENT_OUT;
   36245          21 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36246          21 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->valueSmaller;
   36247          21 :                 return GF_OK;
   36248             :         case 8:
   36249          37 :                 info->name = "parameterValue";
   36250          37 :                 info->eventType = GF_SG_EVENT_OUT;
   36251          37 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36252          37 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->parameterValue;
   36253          37 :                 return GF_OK;
   36254             :         default:
   36255           0 :                 return GF_BAD_PARAM;
   36256             :         }
   36257         390 : }
   36258             : 
   36259             : 
   36260             : static s32 EnvironmentTest_get_field_index_by_name(char *name)
   36261             : {
   36262          48 :         if (!strcmp("evaluate", name)) return 0;
   36263          24 :         if (!strcmp("enabled", name)) return 1;
   36264          36 :         if (!strcmp("parameter", name)) return 2;
   36265          12 :         if (!strcmp("compareValue", name)) return 3;
   36266          12 :         if (!strcmp("evaluateOnChange", name)) return 4;
   36267          12 :         if (!strcmp("valueLarger", name)) return 5;
   36268          16 :         if (!strcmp("valueEqual", name)) return 6;
   36269           8 :         if (!strcmp("valueSmaller", name)) return 7;
   36270          16 :         if (!strcmp("parameterValue", name)) return 8;
   36271           0 :         return -1;
   36272          24 : }
   36273             : static Bool EnvironmentTest_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36274             : {
   36275             :         switch (FieldIndex) {
   36276             :         default:
   36277           0 :                 return 0;
   36278             :         }
   36279             : }
   36280             : 
   36281             : 
   36282             : 
   36283             : GF_Node *EnvironmentTest_Create()
   36284             : {
   36285             :         M_EnvironmentTest *p;
   36286         162 :         GF_SAFEALLOC(p, M_EnvironmentTest);
   36287          54 :         if(!p) return NULL;
   36288          54 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_EnvironmentTest);
   36289             : 
   36290             :         /*default field values*/
   36291          54 :         p->enabled = 1;
   36292          54 :         p->parameter = 0;
   36293          54 :         p->evaluateOnChange = 1;
   36294          54 :         return (GF_Node *)p;
   36295          54 : }
   36296             : 
   36297             : 
   36298             : /*
   36299             :         KeyNavigator Node deletion
   36300             : */
   36301             : 
   36302             : static void KeyNavigator_Del(GF_Node *node)
   36303             : {
   36304         132 :         M_KeyNavigator *p = (M_KeyNavigator *) node;
   36305          66 :         gf_node_unregister((GF_Node *) p->sensor, (GF_Node *) p);
   36306          66 :         gf_node_unregister((GF_Node *) p->left, (GF_Node *) p);
   36307          66 :         gf_node_unregister((GF_Node *) p->right, (GF_Node *) p);
   36308          66 :         gf_node_unregister((GF_Node *) p->up, (GF_Node *) p);
   36309          66 :         gf_node_unregister((GF_Node *) p->down, (GF_Node *) p);
   36310          66 :         gf_node_unregister((GF_Node *) p->select, (GF_Node *) p);
   36311          66 :         gf_node_unregister((GF_Node *) p->quit, (GF_Node *) p);
   36312          66 :         gf_node_free((GF_Node *) p);
   36313          66 : }
   36314             : 
   36315             : static const u16 KeyNavigator_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8};
   36316             : static const u16 KeyNavigator_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   36317             : static const u16 KeyNavigator_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
   36318             : 
   36319             : static u32 KeyNavigator_get_field_count(GF_Node *node, u8 IndexMode)
   36320             : {
   36321         312 :         switch(IndexMode) {
   36322             :         case GF_SG_FIELD_CODING_IN:
   36323           6 :                 return 9;
   36324             :         case GF_SG_FIELD_CODING_DEF:
   36325          24 :                 return 8;
   36326             :         case GF_SG_FIELD_CODING_OUT:
   36327          48 :                 return 9;
   36328             :         case GF_SG_FIELD_CODING_DYN:
   36329           0 :                 return 0;
   36330             :         default:
   36331          78 :                 return 10;
   36332             :         }
   36333         156 : }
   36334             : 
   36335             : static GF_Err KeyNavigator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36336             : {
   36337         508 :         switch(IndexMode) {
   36338             :         case GF_SG_FIELD_CODING_IN:
   36339           4 :                 *allField = KeyNavigator_In2All[inField];
   36340           4 :                 return GF_OK;
   36341             :         case GF_SG_FIELD_CODING_DEF:
   36342          90 :                 *allField = KeyNavigator_Def2All[inField];
   36343          90 :                 return GF_OK;
   36344             :         case GF_SG_FIELD_CODING_OUT:
   36345         160 :                 *allField = KeyNavigator_Out2All[inField];
   36346         160 :                 return GF_OK;
   36347             :         default:
   36348           0 :                 return GF_BAD_PARAM;
   36349             :         }
   36350         254 : }
   36351             : static GF_Err KeyNavigator_get_field(GF_Node *node, GF_FieldInfo *info)
   36352             : {
   36353        1416 :         switch (info->fieldIndex) {
   36354             :         case 0:
   36355          90 :                 info->name = "setFocus";
   36356          90 :                 info->eventType = GF_SG_EVENT_IN;
   36357          90 :                 info->on_event_in = ((M_KeyNavigator *)node)->on_setFocus;
   36358          90 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36359          90 :                 info->far_ptr = & ((M_KeyNavigator *) node)->setFocus;
   36360          90 :                 return GF_OK;
   36361             :         case 1:
   36362         134 :                 info->name = "sensor";
   36363         134 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36364         134 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36365         134 :                 info->NDTtype = NDT_SF3DNode;
   36366         134 :                 info->far_ptr = & ((M_KeyNavigator *)node)->sensor;
   36367         134 :                 return GF_OK;
   36368             :         case 2:
   36369          86 :                 info->name = "left";
   36370          86 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36371          86 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36372          86 :                 info->NDTtype = NDT_SF2DNode;
   36373          86 :                 info->far_ptr = & ((M_KeyNavigator *)node)->left;
   36374          86 :                 return GF_OK;
   36375             :         case 3:
   36376          76 :                 info->name = "right";
   36377          76 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36378          76 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36379          76 :                 info->NDTtype = NDT_SF2DNode;
   36380          76 :                 info->far_ptr = & ((M_KeyNavigator *)node)->right;
   36381          76 :                 return GF_OK;
   36382             :         case 4:
   36383          70 :                 info->name = "up";
   36384          70 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36385          70 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36386          70 :                 info->NDTtype = NDT_SF2DNode;
   36387          70 :                 info->far_ptr = & ((M_KeyNavigator *)node)->up;
   36388          70 :                 return GF_OK;
   36389             :         case 5:
   36390          58 :                 info->name = "down";
   36391          58 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36392          58 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36393          58 :                 info->NDTtype = NDT_SF2DNode;
   36394          58 :                 info->far_ptr = & ((M_KeyNavigator *)node)->down;
   36395          58 :                 return GF_OK;
   36396             :         case 6:
   36397          42 :                 info->name = "select";
   36398          42 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36399          42 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36400          42 :                 info->NDTtype = NDT_SF2DNode;
   36401          42 :                 info->far_ptr = & ((M_KeyNavigator *)node)->select;
   36402          42 :                 return GF_OK;
   36403             :         case 7:
   36404          24 :                 info->name = "quit";
   36405          24 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36406          24 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36407          24 :                 info->NDTtype = NDT_SF2DNode;
   36408          24 :                 info->far_ptr = & ((M_KeyNavigator *)node)->quit;
   36409          24 :                 return GF_OK;
   36410             :         case 8:
   36411          48 :                 info->name = "step";
   36412          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36413          48 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   36414          48 :                 info->far_ptr = & ((M_KeyNavigator *) node)->step;
   36415          48 :                 return GF_OK;
   36416             :         case 9:
   36417          80 :                 info->name = "focusSet";
   36418          80 :                 info->eventType = GF_SG_EVENT_OUT;
   36419          80 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36420          80 :                 info->far_ptr = & ((M_KeyNavigator *) node)->focusSet;
   36421          80 :                 return GF_OK;
   36422             :         default:
   36423           0 :                 return GF_BAD_PARAM;
   36424             :         }
   36425         708 : }
   36426             : 
   36427             : 
   36428             : static s32 KeyNavigator_get_field_index_by_name(char *name)
   36429             : {
   36430         180 :         if (!strcmp("setFocus", name)) return 0;
   36431         100 :         if (!strcmp("sensor", name)) return 1;
   36432          76 :         if (!strcmp("left", name)) return 2;
   36433          68 :         if (!strcmp("right", name)) return 3;
   36434          60 :         if (!strcmp("up", name)) return 4;
   36435          52 :         if (!strcmp("down", name)) return 5;
   36436          40 :         if (!strcmp("select", name)) return 6;
   36437          32 :         if (!strcmp("quit", name)) return 7;
   36438          32 :         if (!strcmp("step", name)) return 8;
   36439          64 :         if (!strcmp("focusSet", name)) return 9;
   36440           0 :         return -1;
   36441          88 : }
   36442             : static Bool KeyNavigator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36443             : {
   36444             :         switch (FieldIndex) {
   36445             :         default:
   36446           0 :                 return 0;
   36447             :         }
   36448             : }
   36449             : 
   36450             : 
   36451             : 
   36452             : GF_Node *KeyNavigator_Create()
   36453             : {
   36454             :         M_KeyNavigator *p;
   36455         198 :         GF_SAFEALLOC(p, M_KeyNavigator);
   36456          66 :         if(!p) return NULL;
   36457          66 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_KeyNavigator);
   36458             : 
   36459             :         /*default field values*/
   36460          66 :         p->step = FLT2FIX(0);
   36461          66 :         return (GF_Node *)p;
   36462          66 : }
   36463             : 
   36464             : 
   36465             : /*
   36466             :         SpacePartition Node deletion
   36467             : */
   36468             : 
   36469             : static void SpacePartition_Del(GF_Node *node)
   36470             : {
   36471           0 :         M_SpacePartition *p = (M_SpacePartition *) node;
   36472           0 :         gf_sg_sfurl_del(p->SPStream);
   36473           0 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   36474           0 :         gf_node_free((GF_Node *) p);
   36475           0 : }
   36476             : 
   36477             : static const u16 SpacePartition_Def2All[] = { 2, 3};
   36478             : static const u16 SpacePartition_In2All[] = { 0, 1, 2, 3};
   36479             : static const u16 SpacePartition_Out2All[] = { 2, 3};
   36480             : 
   36481             : static u32 SpacePartition_get_field_count(GF_Node *node, u8 IndexMode)
   36482             : {
   36483           0 :         switch(IndexMode) {
   36484             :         case GF_SG_FIELD_CODING_IN:
   36485           0 :                 return 4;
   36486             :         case GF_SG_FIELD_CODING_DEF:
   36487           0 :                 return 2;
   36488             :         case GF_SG_FIELD_CODING_OUT:
   36489           0 :                 return 2;
   36490             :         case GF_SG_FIELD_CODING_DYN:
   36491           0 :                 return 0;
   36492             :         default:
   36493           0 :                 return 4;
   36494             :         }
   36495           0 : }
   36496             : 
   36497             : static GF_Err SpacePartition_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36498             : {
   36499           0 :         switch(IndexMode) {
   36500             :         case GF_SG_FIELD_CODING_IN:
   36501           0 :                 *allField = SpacePartition_In2All[inField];
   36502           0 :                 return GF_OK;
   36503             :         case GF_SG_FIELD_CODING_DEF:
   36504           0 :                 *allField = SpacePartition_Def2All[inField];
   36505           0 :                 return GF_OK;
   36506             :         case GF_SG_FIELD_CODING_OUT:
   36507           0 :                 *allField = SpacePartition_Out2All[inField];
   36508           0 :                 return GF_OK;
   36509             :         default:
   36510           0 :                 return GF_BAD_PARAM;
   36511             :         }
   36512           0 : }
   36513             : static GF_Err SpacePartition_get_field(GF_Node *node, GF_FieldInfo *info)
   36514             : {
   36515           0 :         switch (info->fieldIndex) {
   36516             :         case 0:
   36517           0 :                 info->name = "addChildren";
   36518           0 :                 info->eventType = GF_SG_EVENT_IN;
   36519           0 :                 info->on_event_in = ((M_SpacePartition *)node)->on_addChildren;
   36520           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   36521           0 :                 info->NDTtype = NDT_SF3DNode;
   36522           0 :                 info->far_ptr = & ((M_SpacePartition *)node)->addChildren;
   36523           0 :                 return GF_OK;
   36524             :         case 1:
   36525           0 :                 info->name = "removeChildren";
   36526           0 :                 info->eventType = GF_SG_EVENT_IN;
   36527           0 :                 info->on_event_in = ((M_SpacePartition *)node)->on_removeChildren;
   36528           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   36529           0 :                 info->NDTtype = NDT_SF3DNode;
   36530           0 :                 info->far_ptr = & ((M_SpacePartition *)node)->removeChildren;
   36531           0 :                 return GF_OK;
   36532             :         case 2:
   36533           0 :                 info->name = "children";
   36534           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36535           0 :                 info->fieldType = GF_SG_VRML_MFNODE;
   36536           0 :                 info->NDTtype = NDT_SF3DNode;
   36537           0 :                 info->far_ptr = & ((M_SpacePartition *)node)->children;
   36538           0 :                 return GF_OK;
   36539             :         case 3:
   36540           0 :                 info->name = "SPStream";
   36541           0 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36542           0 :                 info->fieldType = GF_SG_VRML_SFURL;
   36543           0 :                 info->far_ptr = & ((M_SpacePartition *) node)->SPStream;
   36544           0 :                 return GF_OK;
   36545             :         default:
   36546           0 :                 return GF_BAD_PARAM;
   36547             :         }
   36548           0 : }
   36549             : 
   36550             : 
   36551             : static s32 SpacePartition_get_field_index_by_name(char *name)
   36552             : {
   36553           0 :         if (!strcmp("addChildren", name)) return 0;
   36554           0 :         if (!strcmp("removeChildren", name)) return 1;
   36555           0 :         if (!strcmp("children", name)) return 2;
   36556           0 :         if (!strcmp("SPStream", name)) return 3;
   36557           0 :         return -1;
   36558           0 : }
   36559             : static Bool SpacePartition_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36560             : {
   36561             :         switch (FieldIndex) {
   36562             :         default:
   36563           0 :                 return 0;
   36564             :         }
   36565             : }
   36566             : 
   36567             : 
   36568             : 
   36569             : GF_Node *SpacePartition_Create()
   36570             : {
   36571             :         M_SpacePartition *p;
   36572           0 :         GF_SAFEALLOC(p, M_SpacePartition);
   36573           0 :         if(!p) return NULL;
   36574           0 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SpacePartition);
   36575           0 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   36576             : 
   36577             :         /*default field values*/
   36578           0 :         return (GF_Node *)p;
   36579           0 : }
   36580             : 
   36581             : 
   36582             : /*
   36583             :         Storage Node deletion
   36584             : */
   36585             : 
   36586             : static void Storage_Del(GF_Node *node)
   36587             : {
   36588          36 :         M_Storage *p = (M_Storage *) node;
   36589          18 :         gf_sg_sfstring_del(p->name);
   36590          18 :         gf_sg_mfattrref_del(p->storageList);
   36591          18 :         gf_node_free((GF_Node *) p);
   36592          18 : }
   36593             : 
   36594             : static const u16 Storage_Def2All[] = { 2, 3, 4, 5};
   36595             : static const u16 Storage_In2All[] = { 0, 1, 2};
   36596             : static const u16 Storage_Out2All[] = { 2};
   36597             : 
   36598             : static u32 Storage_get_field_count(GF_Node *node, u8 IndexMode)
   36599             : {
   36600          32 :         switch(IndexMode) {
   36601             :         case GF_SG_FIELD_CODING_IN:
   36602           0 :                 return 3;
   36603             :         case GF_SG_FIELD_CODING_DEF:
   36604           9 :                 return 4;
   36605             :         case GF_SG_FIELD_CODING_OUT:
   36606           0 :                 return 1;
   36607             :         case GF_SG_FIELD_CODING_DYN:
   36608           0 :                 return 0;
   36609             :         default:
   36610           7 :                 return 6;
   36611             :         }
   36612          16 : }
   36613             : 
   36614             : static GF_Err Storage_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36615             : {
   36616          46 :         switch(IndexMode) {
   36617             :         case GF_SG_FIELD_CODING_IN:
   36618           0 :                 *allField = Storage_In2All[inField];
   36619           0 :                 return GF_OK;
   36620             :         case GF_SG_FIELD_CODING_DEF:
   36621          23 :                 *allField = Storage_Def2All[inField];
   36622          23 :                 return GF_OK;
   36623             :         case GF_SG_FIELD_CODING_OUT:
   36624           0 :                 *allField = Storage_Out2All[inField];
   36625           0 :                 return GF_OK;
   36626             :         default:
   36627           0 :                 return GF_BAD_PARAM;
   36628             :         }
   36629          23 : }
   36630             : static GF_Err Storage_get_field(GF_Node *node, GF_FieldInfo *info)
   36631             : {
   36632         254 :         switch (info->fieldIndex) {
   36633             :         case 0:
   36634           7 :                 info->name = "forceSave";
   36635           7 :                 info->eventType = GF_SG_EVENT_IN;
   36636           7 :                 info->on_event_in = ((M_Storage *)node)->on_forceSave;
   36637           7 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36638           7 :                 info->far_ptr = & ((M_Storage *) node)->forceSave;
   36639           7 :                 return GF_OK;
   36640             :         case 1:
   36641           7 :                 info->name = "forceRestore";
   36642           7 :                 info->eventType = GF_SG_EVENT_IN;
   36643           7 :                 info->on_event_in = ((M_Storage *)node)->on_forceRestore;
   36644           7 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36645           7 :                 info->far_ptr = & ((M_Storage *) node)->forceRestore;
   36646           7 :                 return GF_OK;
   36647             :         case 2:
   36648          18 :                 info->name = "auto";
   36649          18 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36650          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36651          18 :                 info->far_ptr = & ((M_Storage *) node)->_auto;
   36652          18 :                 return GF_OK;
   36653             :         case 3:
   36654          33 :                 info->name = "expireAfter";
   36655          33 :                 info->eventType = GF_SG_EVENT_FIELD;
   36656          33 :                 info->fieldType = GF_SG_VRML_SFINT32;
   36657          33 :                 info->far_ptr = & ((M_Storage *) node)->expireAfter;
   36658          33 :                 return GF_OK;
   36659             :         case 4:
   36660          33 :                 info->name = "name";
   36661          33 :                 info->eventType = GF_SG_EVENT_FIELD;
   36662          33 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36663          33 :                 info->far_ptr = & ((M_Storage *) node)->name;
   36664          33 :                 return GF_OK;
   36665             :         case 5:
   36666          29 :                 info->name = "storageList";
   36667          29 :                 info->eventType = GF_SG_EVENT_FIELD;
   36668          29 :                 info->fieldType = GF_SG_VRML_MFATTRREF;
   36669          29 :                 info->far_ptr = & ((M_Storage *) node)->storageList;
   36670          29 :                 return GF_OK;
   36671             :         default:
   36672           0 :                 return GF_BAD_PARAM;
   36673             :         }
   36674         127 : }
   36675             : 
   36676             : 
   36677             : static s32 Storage_get_field_index_by_name(char *name)
   36678             : {
   36679          32 :         if (!strcmp("forceSave", name)) return 0;
   36680          16 :         if (!strcmp("forceRestore", name)) return 1;
   36681          16 :         if (!strcmp("auto", name)) return 2;
   36682          20 :         if (!strcmp("expireAfter", name)) return 3;
   36683          16 :         if (!strcmp("name", name)) return 4;
   36684          12 :         if (!strcmp("storageList", name)) return 5;
   36685           4 :         return -1;
   36686          16 : }
   36687             : static Bool Storage_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36688             : {
   36689             :         switch (FieldIndex) {
   36690             :         default:
   36691           0 :                 return 0;
   36692             :         }
   36693             : }
   36694             : 
   36695             : 
   36696             : 
   36697             : GF_Node *Storage_Create()
   36698             : {
   36699             :         M_Storage *p;
   36700          54 :         GF_SAFEALLOC(p, M_Storage);
   36701          18 :         if(!p) return NULL;
   36702          18 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Storage);
   36703             : 
   36704             :         /*default field values*/
   36705          18 :         p->_auto = 1;
   36706          18 :         p->expireAfter = 0;
   36707          18 :         return (GF_Node *)p;
   36708          18 : }
   36709             : 
   36710             : 
   36711             : 
   36712             : 
   36713             : GF_Node *gf_sg_mpeg4_node_new(u32 NodeTag)
   36714             : {
   36715      404890 :         switch (NodeTag) {
   36716             :         case TAG_MPEG4_Anchor:
   36717          92 :                 return Anchor_Create();
   36718             :         case TAG_MPEG4_AnimationStream:
   36719         126 :                 return AnimationStream_Create();
   36720             :         case TAG_MPEG4_Appearance:
   36721       21658 :                 return Appearance_Create();
   36722             :         case TAG_MPEG4_AudioBuffer:
   36723          18 :                 return AudioBuffer_Create();
   36724             :         case TAG_MPEG4_AudioClip:
   36725          90 :                 return AudioClip_Create();
   36726             :         case TAG_MPEG4_AudioDelay:
   36727           0 :                 return AudioDelay_Create();
   36728             :         case TAG_MPEG4_AudioFX:
   36729           0 :                 return AudioFX_Create();
   36730             :         case TAG_MPEG4_AudioMix:
   36731           0 :                 return AudioMix_Create();
   36732             :         case TAG_MPEG4_AudioSource:
   36733         125 :                 return AudioSource_Create();
   36734             :         case TAG_MPEG4_AudioSwitch:
   36735           0 :                 return AudioSwitch_Create();
   36736             :         case TAG_MPEG4_Background:
   36737          61 :                 return Background_Create();
   36738             :         case TAG_MPEG4_Background2D:
   36739        5232 :                 return Background2D_Create();
   36740             :         case TAG_MPEG4_Billboard:
   36741          54 :                 return Billboard_Create();
   36742             :         case TAG_MPEG4_Bitmap:
   36743         578 :                 return Bitmap_Create();
   36744             :         case TAG_MPEG4_Box:
   36745         928 :                 return Box_Create();
   36746             :         case TAG_MPEG4_Circle:
   36747        2964 :                 return Circle_Create();
   36748             :         case TAG_MPEG4_Collision:
   36749          36 :                 return Collision_Create();
   36750             :         case TAG_MPEG4_Color:
   36751         152 :                 return Color_Create();
   36752             :         case TAG_MPEG4_ColorInterpolator:
   36753         108 :                 return ColorInterpolator_Create();
   36754             :         case TAG_MPEG4_CompositeTexture2D:
   36755          82 :                 return CompositeTexture2D_Create();
   36756             :         case TAG_MPEG4_CompositeTexture3D:
   36757          36 :                 return CompositeTexture3D_Create();
   36758             :         case TAG_MPEG4_Conditional:
   36759        8859 :                 return Conditional_Create();
   36760             :         case TAG_MPEG4_Cone:
   36761         108 :                 return Cone_Create();
   36762             :         case TAG_MPEG4_Coordinate:
   36763          85 :                 return Coordinate_Create();
   36764             :         case TAG_MPEG4_Coordinate2D:
   36765        4134 :                 return Coordinate2D_Create();
   36766             :         case TAG_MPEG4_CoordinateInterpolator:
   36767           0 :                 return CoordinateInterpolator_Create();
   36768             :         case TAG_MPEG4_CoordinateInterpolator2D:
   36769          36 :                 return CoordinateInterpolator2D_Create();
   36770             :         case TAG_MPEG4_Curve2D:
   36771        1740 :                 return Curve2D_Create();
   36772             :         case TAG_MPEG4_Cylinder:
   36773         270 :                 return Cylinder_Create();
   36774             :         case TAG_MPEG4_CylinderSensor:
   36775          18 :                 return CylinderSensor_Create();
   36776             :         case TAG_MPEG4_DirectionalLight:
   36777          90 :                 return DirectionalLight_Create();
   36778             :         case TAG_MPEG4_DiscSensor:
   36779          54 :                 return DiscSensor_Create();
   36780             :         case TAG_MPEG4_ElevationGrid:
   36781          18 :                 return ElevationGrid_Create();
   36782             :         case TAG_MPEG4_Expression:
   36783           0 :                 return Expression_Create();
   36784             :         case TAG_MPEG4_Extrusion:
   36785          18 :                 return Extrusion_Create();
   36786             :         case TAG_MPEG4_Face:
   36787           0 :                 return Face_Create();
   36788             :         case TAG_MPEG4_FaceDefMesh:
   36789           0 :                 return FaceDefMesh_Create();
   36790             :         case TAG_MPEG4_FaceDefTables:
   36791           0 :                 return FaceDefTables_Create();
   36792             :         case TAG_MPEG4_FaceDefTransform:
   36793           0 :                 return FaceDefTransform_Create();
   36794             :         case TAG_MPEG4_FAP:
   36795           0 :                 return FAP_Create();
   36796             :         case TAG_MPEG4_FDP:
   36797           0 :                 return FDP_Create();
   36798             :         case TAG_MPEG4_FIT:
   36799           0 :                 return FIT_Create();
   36800             :         case TAG_MPEG4_Fog:
   36801          18 :                 return Fog_Create();
   36802             :         case TAG_MPEG4_FontStyle:
   36803        7836 :                 return FontStyle_Create();
   36804             :         case TAG_MPEG4_Form:
   36805         285 :                 return Form_Create();
   36806             :         case TAG_MPEG4_Group:
   36807        1434 :                 return Group_Create();
   36808             :         case TAG_MPEG4_ImageTexture:
   36809        1000 :                 return ImageTexture_Create();
   36810             :         case TAG_MPEG4_IndexedFaceSet:
   36811          57 :                 return IndexedFaceSet_Create();
   36812             :         case TAG_MPEG4_IndexedFaceSet2D:
   36813        1529 :                 return IndexedFaceSet2D_Create();
   36814             :         case TAG_MPEG4_IndexedLineSet:
   36815          36 :                 return IndexedLineSet_Create();
   36816             :         case TAG_MPEG4_IndexedLineSet2D:
   36817         835 :                 return IndexedLineSet2D_Create();
   36818             :         case TAG_MPEG4_Inline:
   36819         256 :                 return Inline_Create();
   36820             :         case TAG_MPEG4_LOD:
   36821          18 :                 return LOD_Create();
   36822             :         case TAG_MPEG4_Layer2D:
   36823         367 :                 return Layer2D_Create();
   36824             :         case TAG_MPEG4_Layer3D:
   36825          92 :                 return Layer3D_Create();
   36826             :         case TAG_MPEG4_Layout:
   36827        2520 :                 return Layout_Create();
   36828             :         case TAG_MPEG4_LineProperties:
   36829        1348 :                 return LineProperties_Create();
   36830             :         case TAG_MPEG4_ListeningPoint:
   36831           0 :                 return ListeningPoint_Create();
   36832             :         case TAG_MPEG4_Material:
   36833        1419 :                 return Material_Create();
   36834             :         case TAG_MPEG4_Material2D:
   36835       17374 :                 return Material2D_Create();
   36836             :         case TAG_MPEG4_MovieTexture:
   36837         552 :                 return MovieTexture_Create();
   36838             :         case TAG_MPEG4_NavigationInfo:
   36839         260 :                 return NavigationInfo_Create();
   36840             :         case TAG_MPEG4_Normal:
   36841           0 :                 return Normal_Create();
   36842             :         case TAG_MPEG4_NormalInterpolator:
   36843           0 :                 return NormalInterpolator_Create();
   36844             :         case TAG_MPEG4_OrderedGroup:
   36845        4754 :                 return OrderedGroup_Create();
   36846             :         case TAG_MPEG4_OrientationInterpolator:
   36847         289 :                 return OrientationInterpolator_Create();
   36848             :         case TAG_MPEG4_PixelTexture:
   36849          72 :                 return PixelTexture_Create();
   36850             :         case TAG_MPEG4_PlaneSensor:
   36851          18 :                 return PlaneSensor_Create();
   36852             :         case TAG_MPEG4_PlaneSensor2D:
   36853         279 :                 return PlaneSensor2D_Create();
   36854             :         case TAG_MPEG4_PointLight:
   36855          18 :                 return PointLight_Create();
   36856             :         case TAG_MPEG4_PointSet:
   36857          18 :                 return PointSet_Create();
   36858             :         case TAG_MPEG4_PointSet2D:
   36859          92 :                 return PointSet2D_Create();
   36860             :         case TAG_MPEG4_PositionInterpolator:
   36861         198 :                 return PositionInterpolator_Create();
   36862             :         case TAG_MPEG4_PositionInterpolator2D:
   36863         610 :                 return PositionInterpolator2D_Create();
   36864             :         case TAG_MPEG4_ProximitySensor2D:
   36865          36 :                 return ProximitySensor2D_Create();
   36866             :         case TAG_MPEG4_ProximitySensor:
   36867          18 :                 return ProximitySensor_Create();
   36868             :         case TAG_MPEG4_QuantizationParameter:
   36869         123 :                 return QuantizationParameter_Create();
   36870             :         case TAG_MPEG4_Rectangle:
   36871        7135 :                 return Rectangle_Create();
   36872             :         case TAG_MPEG4_ScalarInterpolator:
   36873         759 :                 return ScalarInterpolator_Create();
   36874             :         case TAG_MPEG4_Script:
   36875         409 :                 return Script_Create();
   36876             :         case TAG_MPEG4_Shape:
   36877       32371 :                 return Shape_Create();
   36878             :         case TAG_MPEG4_Sound:
   36879          36 :                 return Sound_Create();
   36880             :         case TAG_MPEG4_Sound2D:
   36881         181 :                 return Sound2D_Create();
   36882             :         case TAG_MPEG4_Sphere:
   36883         198 :                 return Sphere_Create();
   36884             :         case TAG_MPEG4_SphereSensor:
   36885          18 :                 return SphereSensor_Create();
   36886             :         case TAG_MPEG4_SpotLight:
   36887          18 :                 return SpotLight_Create();
   36888             :         case TAG_MPEG4_Switch:
   36889         544 :                 return Switch_Create();
   36890             :         case TAG_MPEG4_TermCap:
   36891           0 :                 return TermCap_Create();
   36892             :         case TAG_MPEG4_Text:
   36893       12892 :                 return Text_Create();
   36894             :         case TAG_MPEG4_TextureCoordinate:
   36895           0 :                 return TextureCoordinate_Create();
   36896             :         case TAG_MPEG4_TextureTransform:
   36897         234 :                 return TextureTransform_Create();
   36898             :         case TAG_MPEG4_TimeSensor:
   36899        1867 :                 return TimeSensor_Create();
   36900             :         case TAG_MPEG4_TouchSensor:
   36901        5957 :                 return TouchSensor_Create();
   36902             :         case TAG_MPEG4_Transform:
   36903        2471 :                 return Transform_Create();
   36904             :         case TAG_MPEG4_Transform2D:
   36905       29181 :                 return Transform2D_Create();
   36906             :         case TAG_MPEG4_Valuator:
   36907        6528 :                 return Valuator_Create();
   36908             :         case TAG_MPEG4_Viewpoint:
   36909         595 :                 return Viewpoint_Create();
   36910             :         case TAG_MPEG4_VisibilitySensor:
   36911          18 :                 return VisibilitySensor_Create();
   36912             :         case TAG_MPEG4_Viseme:
   36913           0 :                 return Viseme_Create();
   36914             :         case TAG_MPEG4_WorldInfo:
   36915        5346 :                 return WorldInfo_Create();
   36916             :         case TAG_MPEG4_AcousticMaterial:
   36917           0 :                 return AcousticMaterial_Create();
   36918             :         case TAG_MPEG4_AcousticScene:
   36919           0 :                 return AcousticScene_Create();
   36920             :         case TAG_MPEG4_ApplicationWindow:
   36921           0 :                 return ApplicationWindow_Create();
   36922             :         case TAG_MPEG4_BAP:
   36923           0 :                 return BAP_Create();
   36924             :         case TAG_MPEG4_BDP:
   36925           0 :                 return BDP_Create();
   36926             :         case TAG_MPEG4_Body:
   36927           0 :                 return Body_Create();
   36928             :         case TAG_MPEG4_BodyDefTable:
   36929           0 :                 return BodyDefTable_Create();
   36930             :         case TAG_MPEG4_BodySegmentConnectionHint:
   36931           0 :                 return BodySegmentConnectionHint_Create();
   36932             :         case TAG_MPEG4_DirectiveSound:
   36933           0 :                 return DirectiveSound_Create();
   36934             :         case TAG_MPEG4_Hierarchical3DMesh:
   36935           0 :                 return Hierarchical3DMesh_Create();
   36936             :         case TAG_MPEG4_MaterialKey:
   36937          18 :                 return MaterialKey_Create();
   36938             :         case TAG_MPEG4_PerceptualParameters:
   36939           0 :                 return PerceptualParameters_Create();
   36940             :         case TAG_MPEG4_TemporalTransform:
   36941           0 :                 return TemporalTransform_Create();
   36942             :         case TAG_MPEG4_TemporalGroup:
   36943           0 :                 return TemporalGroup_Create();
   36944             :         case TAG_MPEG4_ServerCommand:
   36945           0 :                 return ServerCommand_Create();
   36946             :         case TAG_MPEG4_InputSensor:
   36947          54 :                 return InputSensor_Create();
   36948             :         case TAG_MPEG4_MatteTexture:
   36949           0 :                 return MatteTexture_Create();
   36950             :         case TAG_MPEG4_MediaBuffer:
   36951           0 :                 return MediaBuffer_Create();
   36952             :         case TAG_MPEG4_MediaControl:
   36953         277 :                 return MediaControl_Create();
   36954             :         case TAG_MPEG4_MediaSensor:
   36955         240 :                 return MediaSensor_Create();
   36956             :         case TAG_MPEG4_BitWrapper:
   36957           0 :                 return BitWrapper_Create();
   36958             :         case TAG_MPEG4_CoordinateInterpolator4D:
   36959           0 :                 return CoordinateInterpolator4D_Create();
   36960             :         case TAG_MPEG4_DepthImage:
   36961           0 :                 return DepthImage_Create();
   36962             :         case TAG_MPEG4_FFD:
   36963           0 :                 return FFD_Create();
   36964             :         case TAG_MPEG4_Implicit:
   36965           0 :                 return Implicit_Create();
   36966             :         case TAG_MPEG4_XXLFM_Appearance:
   36967           0 :                 return XXLFM_Appearance_Create();
   36968             :         case TAG_MPEG4_XXLFM_BlendList:
   36969           0 :                 return XXLFM_BlendList_Create();
   36970             :         case TAG_MPEG4_XXLFM_FrameList:
   36971           0 :                 return XXLFM_FrameList_Create();
   36972             :         case TAG_MPEG4_XXLFM_LightMap:
   36973           0 :                 return XXLFM_LightMap_Create();
   36974             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   36975           0 :                 return XXLFM_SurfaceMapList_Create();
   36976             :         case TAG_MPEG4_XXLFM_ViewMapList:
   36977           0 :                 return XXLFM_ViewMapList_Create();
   36978             :         case TAG_MPEG4_MeshGrid:
   36979           0 :                 return MeshGrid_Create();
   36980             :         case TAG_MPEG4_NonLinearDeformer:
   36981          23 :                 return NonLinearDeformer_Create();
   36982             :         case TAG_MPEG4_NurbsCurve:
   36983           0 :                 return NurbsCurve_Create();
   36984             :         case TAG_MPEG4_NurbsCurve2D:
   36985           0 :                 return NurbsCurve2D_Create();
   36986             :         case TAG_MPEG4_NurbsSurface:
   36987           0 :                 return NurbsSurface_Create();
   36988             :         case TAG_MPEG4_OctreeImage:
   36989           0 :                 return OctreeImage_Create();
   36990             :         case TAG_MPEG4_XXParticles:
   36991           0 :                 return XXParticles_Create();
   36992             :         case TAG_MPEG4_XXParticleInitBox:
   36993           0 :                 return XXParticleInitBox_Create();
   36994             :         case TAG_MPEG4_XXPlanarObstacle:
   36995           0 :                 return XXPlanarObstacle_Create();
   36996             :         case TAG_MPEG4_XXPointAttractor:
   36997           0 :                 return XXPointAttractor_Create();
   36998             :         case TAG_MPEG4_PointTexture:
   36999           0 :                 return PointTexture_Create();
   37000             :         case TAG_MPEG4_PositionAnimator:
   37001          18 :                 return PositionAnimator_Create();
   37002             :         case TAG_MPEG4_PositionAnimator2D:
   37003          18 :                 return PositionAnimator2D_Create();
   37004             :         case TAG_MPEG4_PositionInterpolator4D:
   37005           0 :                 return PositionInterpolator4D_Create();
   37006             :         case TAG_MPEG4_ProceduralTexture:
   37007           0 :                 return ProceduralTexture_Create();
   37008             :         case TAG_MPEG4_Quadric:
   37009           0 :                 return Quadric_Create();
   37010             :         case TAG_MPEG4_SBBone:
   37011           0 :                 return SBBone_Create();
   37012             :         case TAG_MPEG4_SBMuscle:
   37013           0 :                 return SBMuscle_Create();
   37014             :         case TAG_MPEG4_SBSegment:
   37015           0 :                 return SBSegment_Create();
   37016             :         case TAG_MPEG4_SBSite:
   37017           0 :                 return SBSite_Create();
   37018             :         case TAG_MPEG4_SBSkinnedModel:
   37019           0 :                 return SBSkinnedModel_Create();
   37020             :         case TAG_MPEG4_SBVCAnimation:
   37021           0 :                 return SBVCAnimation_Create();
   37022             :         case TAG_MPEG4_ScalarAnimator:
   37023          18 :                 return ScalarAnimator_Create();
   37024             :         case TAG_MPEG4_SimpleTexture:
   37025           0 :                 return SimpleTexture_Create();
   37026             :         case TAG_MPEG4_SolidRep:
   37027           0 :                 return SolidRep_Create();
   37028             :         case TAG_MPEG4_SubdivisionSurface:
   37029           0 :                 return SubdivisionSurface_Create();
   37030             :         case TAG_MPEG4_SubdivSurfaceSector:
   37031           0 :                 return SubdivSurfaceSector_Create();
   37032             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   37033           0 :                 return WaveletSubdivisionSurface_Create();
   37034             :         case TAG_MPEG4_Clipper2D:
   37035          36 :                 return Clipper2D_Create();
   37036             :         case TAG_MPEG4_ColorTransform:
   37037          99 :                 return ColorTransform_Create();
   37038             :         case TAG_MPEG4_Ellipse:
   37039          36 :                 return Ellipse_Create();
   37040             :         case TAG_MPEG4_LinearGradient:
   37041         110 :                 return LinearGradient_Create();
   37042             :         case TAG_MPEG4_PathLayout:
   37043          36 :                 return PathLayout_Create();
   37044             :         case TAG_MPEG4_RadialGradient:
   37045         144 :                 return RadialGradient_Create();
   37046             :         case TAG_MPEG4_SynthesizedTexture:
   37047           0 :                 return SynthesizedTexture_Create();
   37048             :         case TAG_MPEG4_TransformMatrix2D:
   37049        1966 :                 return TransformMatrix2D_Create();
   37050             :         case TAG_MPEG4_Viewport:
   37051         311 :                 return Viewport_Create();
   37052             :         case TAG_MPEG4_XCurve2D:
   37053          98 :                 return XCurve2D_Create();
   37054             :         case TAG_MPEG4_XFontStyle:
   37055           0 :                 return XFontStyle_Create();
   37056             :         case TAG_MPEG4_XLineProperties:
   37057         480 :                 return XLineProperties_Create();
   37058             :         case TAG_MPEG4_AdvancedAudioBuffer:
   37059           0 :                 return AdvancedAudioBuffer_Create();
   37060             :         case TAG_MPEG4_AudioChannelConfig:
   37061           0 :                 return AudioChannelConfig_Create();
   37062             :         case TAG_MPEG4_DepthImageV2:
   37063           0 :                 return DepthImageV2_Create();
   37064             :         case TAG_MPEG4_MorphShape:
   37065           0 :                 return MorphShape_Create();
   37066             :         case TAG_MPEG4_MultiTexture:
   37067           0 :                 return MultiTexture_Create();
   37068             :         case TAG_MPEG4_PointTextureV2:
   37069           0 :                 return PointTextureV2_Create();
   37070             :         case TAG_MPEG4_SBVCAnimationV2:
   37071           0 :                 return SBVCAnimationV2_Create();
   37072             :         case TAG_MPEG4_SimpleTextureV2:
   37073           0 :                 return SimpleTextureV2_Create();
   37074             :         case TAG_MPEG4_SurroundingSound:
   37075           0 :                 return SurroundingSound_Create();
   37076             :         case TAG_MPEG4_Transform3DAudio:
   37077           0 :                 return Transform3DAudio_Create();
   37078             :         case TAG_MPEG4_WideSound:
   37079           0 :                 return WideSound_Create();
   37080             :         case TAG_MPEG4_ScoreShape:
   37081           0 :                 return ScoreShape_Create();
   37082             :         case TAG_MPEG4_MusicScore:
   37083           0 :                 return MusicScore_Create();
   37084             :         case TAG_MPEG4_FootPrintSetNode:
   37085           0 :                 return FootPrintSetNode_Create();
   37086             :         case TAG_MPEG4_FootPrintNode:
   37087           0 :                 return FootPrintNode_Create();
   37088             :         case TAG_MPEG4_BuildingPartNode:
   37089           0 :                 return BuildingPartNode_Create();
   37090             :         case TAG_MPEG4_RoofNode:
   37091           0 :                 return RoofNode_Create();
   37092             :         case TAG_MPEG4_FacadeNode:
   37093           0 :                 return FacadeNode_Create();
   37094             :         case TAG_MPEG4_Shadow:
   37095           0 :                 return Shadow_Create();
   37096             :         case TAG_MPEG4_CacheTexture:
   37097          36 :                 return CacheTexture_Create();
   37098             :         case TAG_MPEG4_EnvironmentTest:
   37099          54 :                 return EnvironmentTest_Create();
   37100             :         case TAG_MPEG4_KeyNavigator:
   37101          66 :                 return KeyNavigator_Create();
   37102             :         case TAG_MPEG4_SpacePartition:
   37103           0 :                 return SpacePartition_Create();
   37104             :         case TAG_MPEG4_Storage:
   37105          18 :                 return Storage_Create();
   37106             :         default:
   37107           0 :                 return NULL;
   37108             :         }
   37109      202445 : }
   37110             : 
   37111             : const char *gf_sg_mpeg4_node_get_class_name(u32 NodeTag)
   37112             : {
   37113      110710 :         switch (NodeTag) {
   37114             :         case TAG_MPEG4_Anchor:
   37115          32 :                 return "Anchor";
   37116             :         case TAG_MPEG4_AnimationStream:
   37117          58 :                 return "AnimationStream";
   37118             :         case TAG_MPEG4_Appearance:
   37119        6266 :                 return "Appearance";
   37120             :         case TAG_MPEG4_AudioBuffer:
   37121           7 :                 return "AudioBuffer";
   37122             :         case TAG_MPEG4_AudioClip:
   37123          35 :                 return "AudioClip";
   37124             :         case TAG_MPEG4_AudioDelay:
   37125           0 :                 return "AudioDelay";
   37126             :         case TAG_MPEG4_AudioFX:
   37127           0 :                 return "AudioFX";
   37128             :         case TAG_MPEG4_AudioMix:
   37129           0 :                 return "AudioMix";
   37130             :         case TAG_MPEG4_AudioSource:
   37131          46 :                 return "AudioSource";
   37132             :         case TAG_MPEG4_AudioSwitch:
   37133           0 :                 return "AudioSwitch";
   37134             :         case TAG_MPEG4_Background:
   37135          26 :                 return "Background";
   37136             :         case TAG_MPEG4_Background2D:
   37137        2018 :                 return "Background2D";
   37138             :         case TAG_MPEG4_Billboard:
   37139          21 :                 return "Billboard";
   37140             :         case TAG_MPEG4_Bitmap:
   37141         194 :                 return "Bitmap";
   37142             :         case TAG_MPEG4_Box:
   37143         284 :                 return "Box";
   37144             :         case TAG_MPEG4_Circle:
   37145         713 :                 return "Circle";
   37146             :         case TAG_MPEG4_Collision:
   37147          14 :                 return "Collision";
   37148             :         case TAG_MPEG4_Color:
   37149          51 :                 return "Color";
   37150             :         case TAG_MPEG4_ColorInterpolator:
   37151          43 :                 return "ColorInterpolator";
   37152             :         case TAG_MPEG4_CompositeTexture2D:
   37153          32 :                 return "CompositeTexture2D";
   37154             :         case TAG_MPEG4_CompositeTexture3D:
   37155          14 :                 return "CompositeTexture3D";
   37156             :         case TAG_MPEG4_Conditional:
   37157        1972 :                 return "Conditional";
   37158             :         case TAG_MPEG4_Cone:
   37159          33 :                 return "Cone";
   37160             :         case TAG_MPEG4_Coordinate:
   37161          36 :                 return "Coordinate";
   37162             :         case TAG_MPEG4_Coordinate2D:
   37163         889 :                 return "Coordinate2D";
   37164             :         case TAG_MPEG4_CoordinateInterpolator:
   37165           0 :                 return "CoordinateInterpolator";
   37166             :         case TAG_MPEG4_CoordinateInterpolator2D:
   37167          14 :                 return "CoordinateInterpolator2D";
   37168             :         case TAG_MPEG4_Curve2D:
   37169         228 :                 return "Curve2D";
   37170             :         case TAG_MPEG4_Cylinder:
   37171          69 :                 return "Cylinder";
   37172             :         case TAG_MPEG4_CylinderSensor:
   37173           7 :                 return "CylinderSensor";
   37174             :         case TAG_MPEG4_DirectionalLight:
   37175          35 :                 return "DirectionalLight";
   37176             :         case TAG_MPEG4_DiscSensor:
   37177          18 :                 return "DiscSensor";
   37178             :         case TAG_MPEG4_ElevationGrid:
   37179           7 :                 return "ElevationGrid";
   37180             :         case TAG_MPEG4_Expression:
   37181           0 :                 return "Expression";
   37182             :         case TAG_MPEG4_Extrusion:
   37183           7 :                 return "Extrusion";
   37184             :         case TAG_MPEG4_Face:
   37185           0 :                 return "Face";
   37186             :         case TAG_MPEG4_FaceDefMesh:
   37187           0 :                 return "FaceDefMesh";
   37188             :         case TAG_MPEG4_FaceDefTables:
   37189           0 :                 return "FaceDefTables";
   37190             :         case TAG_MPEG4_FaceDefTransform:
   37191           0 :                 return "FaceDefTransform";
   37192             :         case TAG_MPEG4_FAP:
   37193           0 :                 return "FAP";
   37194             :         case TAG_MPEG4_FDP:
   37195           0 :                 return "FDP";
   37196             :         case TAG_MPEG4_FIT:
   37197           0 :                 return "FIT";
   37198             :         case TAG_MPEG4_Fog:
   37199           7 :                 return "Fog";
   37200             :         case TAG_MPEG4_FontStyle:
   37201        3076 :                 return "FontStyle";
   37202             :         case TAG_MPEG4_Form:
   37203          96 :                 return "Form";
   37204             :         case TAG_MPEG4_Group:
   37205         495 :                 return "Group";
   37206             :         case TAG_MPEG4_ImageTexture:
   37207         348 :                 return "ImageTexture";
   37208             :         case TAG_MPEG4_IndexedFaceSet:
   37209          18 :                 return "IndexedFaceSet";
   37210             :         case TAG_MPEG4_IndexedFaceSet2D:
   37211         480 :                 return "IndexedFaceSet2D";
   37212             :         case TAG_MPEG4_IndexedLineSet:
   37213          11 :                 return "IndexedLineSet";
   37214             :         case TAG_MPEG4_IndexedLineSet2D:
   37215         218 :                 return "IndexedLineSet2D";
   37216             :         case TAG_MPEG4_Inline:
   37217          93 :                 return "Inline";
   37218             :         case TAG_MPEG4_LOD:
   37219           7 :                 return "LOD";
   37220             :         case TAG_MPEG4_Layer2D:
   37221          92 :                 return "Layer2D";
   37222             :         case TAG_MPEG4_Layer3D:
   37223          27 :                 return "Layer3D";
   37224             :         case TAG_MPEG4_Layout:
   37225         614 :                 return "Layout";
   37226             :         case TAG_MPEG4_LineProperties:
   37227         247 :                 return "LineProperties";
   37228             :         case TAG_MPEG4_ListeningPoint:
   37229           0 :                 return "ListeningPoint";
   37230             :         case TAG_MPEG4_Material:
   37231         420 :                 return "Material";
   37232             :         case TAG_MPEG4_Material2D:
   37233        2964 :                 return "Material2D";
   37234             :         case TAG_MPEG4_MovieTexture:
   37235         183 :                 return "MovieTexture";
   37236             :         case TAG_MPEG4_NavigationInfo:
   37237          94 :                 return "NavigationInfo";
   37238             :         case TAG_MPEG4_Normal:
   37239           0 :                 return "Normal";
   37240             :         case TAG_MPEG4_NormalInterpolator:
   37241           0 :                 return "NormalInterpolator";
   37242             :         case TAG_MPEG4_OrderedGroup:
   37243        1796 :                 return "OrderedGroup";
   37244             :         case TAG_MPEG4_OrientationInterpolator:
   37245         110 :                 return "OrientationInterpolator";
   37246             :         case TAG_MPEG4_PixelTexture:
   37247          19 :                 return "PixelTexture";
   37248             :         case TAG_MPEG4_PlaneSensor:
   37249           7 :                 return "PlaneSensor";
   37250             :         case TAG_MPEG4_PlaneSensor2D:
   37251          93 :                 return "PlaneSensor2D";
   37252             :         case TAG_MPEG4_PointLight:
   37253           7 :                 return "PointLight";
   37254             :         case TAG_MPEG4_PointSet:
   37255           7 :                 return "PointSet";
   37256             :         case TAG_MPEG4_PointSet2D:
   37257          35 :                 return "PointSet2D";
   37258             :         case TAG_MPEG4_PositionInterpolator:
   37259          74 :                 return "PositionInterpolator";
   37260             :         case TAG_MPEG4_PositionInterpolator2D:
   37261         212 :                 return "PositionInterpolator2D";
   37262             :         case TAG_MPEG4_ProximitySensor2D:
   37263          11 :                 return "ProximitySensor2D";
   37264             :         case TAG_MPEG4_ProximitySensor:
   37265           7 :                 return "ProximitySensor";
   37266             :         case TAG_MPEG4_QuantizationParameter:
   37267          41 :                 return "QuantizationParameter";
   37268             :         case TAG_MPEG4_Rectangle:
   37269        1702 :                 return "Rectangle";
   37270             :         case TAG_MPEG4_ScalarInterpolator:
   37271         272 :                 return "ScalarInterpolator";
   37272             :         case TAG_MPEG4_Script:
   37273         201 :                 return "Script";
   37274             :         case TAG_MPEG4_Shape:
   37275        9536 :                 return "Shape";
   37276             :         case TAG_MPEG4_Sound:
   37277          14 :                 return "Sound";
   37278             :         case TAG_MPEG4_Sound2D:
   37279          71 :                 return "Sound2D";
   37280             :         case TAG_MPEG4_Sphere:
   37281          77 :                 return "Sphere";
   37282             :         case TAG_MPEG4_SphereSensor:
   37283           7 :                 return "SphereSensor";
   37284             :         case TAG_MPEG4_SpotLight:
   37285           7 :                 return "SpotLight";
   37286             :         case TAG_MPEG4_Switch:
   37287         173 :                 return "Switch";
   37288             :         case TAG_MPEG4_TermCap:
   37289           0 :                 return "TermCap";
   37290             :         case TAG_MPEG4_Text:
   37291        3180 :                 return "Text";
   37292             :         case TAG_MPEG4_TextureCoordinate:
   37293           0 :                 return "TextureCoordinate";
   37294             :         case TAG_MPEG4_TextureTransform:
   37295          73 :                 return "TextureTransform";
   37296             :         case TAG_MPEG4_TimeSensor:
   37297         701 :                 return "TimeSensor";
   37298             :         case TAG_MPEG4_TouchSensor:
   37299        1449 :                 return "TouchSensor";
   37300             :         case TAG_MPEG4_Transform:
   37301         764 :                 return "Transform";
   37302             :         case TAG_MPEG4_Transform2D:
   37303        7474 :                 return "Transform2D";
   37304             :         case TAG_MPEG4_Valuator:
   37305        1371 :                 return "Valuator";
   37306             :         case TAG_MPEG4_Viewpoint:
   37307         214 :                 return "Viewpoint";
   37308             :         case TAG_MPEG4_VisibilitySensor:
   37309           7 :                 return "VisibilitySensor";
   37310             :         case TAG_MPEG4_Viseme:
   37311           0 :                 return "Viseme";
   37312             :         case TAG_MPEG4_WorldInfo:
   37313        2117 :                 return "WorldInfo";
   37314             :         case TAG_MPEG4_AcousticMaterial:
   37315           0 :                 return "AcousticMaterial";
   37316             :         case TAG_MPEG4_AcousticScene:
   37317           0 :                 return "AcousticScene";
   37318             :         case TAG_MPEG4_ApplicationWindow:
   37319           0 :                 return "ApplicationWindow";
   37320             :         case TAG_MPEG4_BAP:
   37321           0 :                 return "BAP";
   37322             :         case TAG_MPEG4_BDP:
   37323           0 :                 return "BDP";
   37324             :         case TAG_MPEG4_Body:
   37325           0 :                 return "Body";
   37326             :         case TAG_MPEG4_BodyDefTable:
   37327           0 :                 return "BodyDefTable";
   37328             :         case TAG_MPEG4_BodySegmentConnectionHint:
   37329           0 :                 return "BodySegmentConnectionHint";
   37330             :         case TAG_MPEG4_DirectiveSound:
   37331           0 :                 return "DirectiveSound";
   37332             :         case TAG_MPEG4_Hierarchical3DMesh:
   37333           0 :                 return "Hierarchical3DMesh";
   37334             :         case TAG_MPEG4_MaterialKey:
   37335           7 :                 return "MaterialKey";
   37336             :         case TAG_MPEG4_PerceptualParameters:
   37337           0 :                 return "PerceptualParameters";
   37338             :         case TAG_MPEG4_TemporalTransform:
   37339           0 :                 return "TemporalTransform";
   37340             :         case TAG_MPEG4_TemporalGroup:
   37341           0 :                 return "TemporalGroup";
   37342             :         case TAG_MPEG4_ServerCommand:
   37343           0 :                 return "ServerCommand";
   37344             :         case TAG_MPEG4_InputSensor:
   37345          21 :                 return "InputSensor";
   37346             :         case TAG_MPEG4_MatteTexture:
   37347           0 :                 return "MatteTexture";
   37348             :         case TAG_MPEG4_MediaBuffer:
   37349           0 :                 return "MediaBuffer";
   37350             :         case TAG_MPEG4_MediaControl:
   37351         115 :                 return "MediaControl";
   37352             :         case TAG_MPEG4_MediaSensor:
   37353          92 :                 return "MediaSensor";
   37354             :         case TAG_MPEG4_BitWrapper:
   37355           0 :                 return "BitWrapper";
   37356             :         case TAG_MPEG4_CoordinateInterpolator4D:
   37357           0 :                 return "CoordinateInterpolator4D";
   37358             :         case TAG_MPEG4_DepthImage:
   37359           0 :                 return "DepthImage";
   37360             :         case TAG_MPEG4_FFD:
   37361           0 :                 return "FFD";
   37362             :         case TAG_MPEG4_Implicit:
   37363           0 :                 return "Implicit";
   37364             :         case TAG_MPEG4_XXLFM_Appearance:
   37365           0 :                 return "XXLFM_Appearance";
   37366             :         case TAG_MPEG4_XXLFM_BlendList:
   37367           0 :                 return "XXLFM_BlendList";
   37368             :         case TAG_MPEG4_XXLFM_FrameList:
   37369           0 :                 return "XXLFM_FrameList";
   37370             :         case TAG_MPEG4_XXLFM_LightMap:
   37371           0 :                 return "XXLFM_LightMap";
   37372             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   37373           0 :                 return "XXLFM_SurfaceMapList";
   37374             :         case TAG_MPEG4_XXLFM_ViewMapList:
   37375           0 :                 return "XXLFM_ViewMapList";
   37376             :         case TAG_MPEG4_MeshGrid:
   37377           0 :                 return "MeshGrid";
   37378             :         case TAG_MPEG4_NonLinearDeformer:
   37379          11 :                 return "NonLinearDeformer";
   37380             :         case TAG_MPEG4_NurbsCurve:
   37381           0 :                 return "NurbsCurve";
   37382             :         case TAG_MPEG4_NurbsCurve2D:
   37383           0 :                 return "NurbsCurve2D";
   37384             :         case TAG_MPEG4_NurbsSurface:
   37385           0 :                 return "NurbsSurface";
   37386             :         case TAG_MPEG4_OctreeImage:
   37387           0 :                 return "OctreeImage";
   37388             :         case TAG_MPEG4_XXParticles:
   37389           0 :                 return "XXParticles";
   37390             :         case TAG_MPEG4_XXParticleInitBox:
   37391           0 :                 return "XXParticleInitBox";
   37392             :         case TAG_MPEG4_XXPlanarObstacle:
   37393           0 :                 return "XXPlanarObstacle";
   37394             :         case TAG_MPEG4_XXPointAttractor:
   37395           0 :                 return "XXPointAttractor";
   37396             :         case TAG_MPEG4_PointTexture:
   37397           0 :                 return "PointTexture";
   37398             :         case TAG_MPEG4_PositionAnimator:
   37399           7 :                 return "PositionAnimator";
   37400             :         case TAG_MPEG4_PositionAnimator2D:
   37401           7 :                 return "PositionAnimator2D";
   37402             :         case TAG_MPEG4_PositionInterpolator4D:
   37403           0 :                 return "PositionInterpolator4D";
   37404             :         case TAG_MPEG4_ProceduralTexture:
   37405           0 :                 return "ProceduralTexture";
   37406             :         case TAG_MPEG4_Quadric:
   37407           0 :                 return "Quadric";
   37408             :         case TAG_MPEG4_SBBone:
   37409           0 :                 return "SBBone";
   37410             :         case TAG_MPEG4_SBMuscle:
   37411           0 :                 return "SBMuscle";
   37412             :         case TAG_MPEG4_SBSegment:
   37413           0 :                 return "SBSegment";
   37414             :         case TAG_MPEG4_SBSite:
   37415           0 :                 return "SBSite";
   37416             :         case TAG_MPEG4_SBSkinnedModel:
   37417           0 :                 return "SBSkinnedModel";
   37418             :         case TAG_MPEG4_SBVCAnimation:
   37419           0 :                 return "SBVCAnimation";
   37420             :         case TAG_MPEG4_ScalarAnimator:
   37421           7 :                 return "ScalarAnimator";
   37422             :         case TAG_MPEG4_SimpleTexture:
   37423           0 :                 return "SimpleTexture";
   37424             :         case TAG_MPEG4_SolidRep:
   37425           0 :                 return "SolidRep";
   37426             :         case TAG_MPEG4_SubdivisionSurface:
   37427           0 :                 return "SubdivisionSurface";
   37428             :         case TAG_MPEG4_SubdivSurfaceSector:
   37429           0 :                 return "SubdivSurfaceSector";
   37430             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   37431           0 :                 return "WaveletSubdivisionSurface";
   37432             :         case TAG_MPEG4_Clipper2D:
   37433          11 :                 return "Clipper2D";
   37434             :         case TAG_MPEG4_ColorTransform:
   37435          36 :                 return "ColorTransform";
   37436             :         case TAG_MPEG4_Ellipse:
   37437          14 :                 return "Ellipse";
   37438             :         case TAG_MPEG4_LinearGradient:
   37439          44 :                 return "LinearGradient";
   37440             :         case TAG_MPEG4_PathLayout:
   37441          14 :                 return "PathLayout";
   37442             :         case TAG_MPEG4_RadialGradient:
   37443          50 :                 return "RadialGradient";
   37444             :         case TAG_MPEG4_SynthesizedTexture:
   37445           0 :                 return "SynthesizedTexture";
   37446             :         case TAG_MPEG4_TransformMatrix2D:
   37447          88 :                 return "TransformMatrix2D";
   37448             :         case TAG_MPEG4_Viewport:
   37449          84 :                 return "Viewport";
   37450             :         case TAG_MPEG4_XCurve2D:
   37451          25 :                 return "XCurve2D";
   37452             :         case TAG_MPEG4_XFontStyle:
   37453           0 :                 return "XFontStyle";
   37454             :         case TAG_MPEG4_XLineProperties:
   37455         146 :                 return "XLineProperties";
   37456             :         case TAG_MPEG4_AdvancedAudioBuffer:
   37457           0 :                 return "AdvancedAudioBuffer";
   37458             :         case TAG_MPEG4_AudioChannelConfig:
   37459           0 :                 return "AudioChannelConfig";
   37460             :         case TAG_MPEG4_DepthImageV2:
   37461           0 :                 return "DepthImageV2";
   37462             :         case TAG_MPEG4_MorphShape:
   37463           0 :                 return "MorphShape";
   37464             :         case TAG_MPEG4_MultiTexture:
   37465           0 :                 return "MultiTexture";
   37466             :         case TAG_MPEG4_PointTextureV2:
   37467           0 :                 return "PointTextureV2";
   37468             :         case TAG_MPEG4_SBVCAnimationV2:
   37469           0 :                 return "SBVCAnimationV2";
   37470             :         case TAG_MPEG4_SimpleTextureV2:
   37471           0 :                 return "SimpleTextureV2";
   37472             :         case TAG_MPEG4_SurroundingSound:
   37473           0 :                 return "SurroundingSound";
   37474             :         case TAG_MPEG4_Transform3DAudio:
   37475           0 :                 return "Transform3DAudio";
   37476             :         case TAG_MPEG4_WideSound:
   37477           0 :                 return "WideSound";
   37478             :         case TAG_MPEG4_ScoreShape:
   37479           0 :                 return "ScoreShape";
   37480             :         case TAG_MPEG4_MusicScore:
   37481           0 :                 return "MusicScore";
   37482             :         case TAG_MPEG4_FootPrintSetNode:
   37483           0 :                 return "FootPrintSetNode";
   37484             :         case TAG_MPEG4_FootPrintNode:
   37485           0 :                 return "FootPrintNode";
   37486             :         case TAG_MPEG4_BuildingPartNode:
   37487           0 :                 return "BuildingPartNode";
   37488             :         case TAG_MPEG4_RoofNode:
   37489           0 :                 return "RoofNode";
   37490             :         case TAG_MPEG4_FacadeNode:
   37491           0 :                 return "FacadeNode";
   37492             :         case TAG_MPEG4_Shadow:
   37493           0 :                 return "Shadow";
   37494             :         case TAG_MPEG4_CacheTexture:
   37495          14 :                 return "CacheTexture";
   37496             :         case TAG_MPEG4_EnvironmentTest:
   37497          15 :                 return "EnvironmentTest";
   37498             :         case TAG_MPEG4_KeyNavigator:
   37499          52 :                 return "KeyNavigator";
   37500             :         case TAG_MPEG4_SpacePartition:
   37501           0 :                 return "SpacePartition";
   37502             :         case TAG_MPEG4_Storage:
   37503           7 :                 return "Storage";
   37504             :         default:
   37505           0 :                 return "Unknown Node";
   37506             :         }
   37507       55355 : }
   37508             : 
   37509             : void gf_sg_mpeg4_node_del(GF_Node *node)
   37510             : {
   37511      607335 :         switch (node->sgprivate->tag) {
   37512             :         case TAG_MPEG4_Anchor:
   37513          92 :                 Anchor_Del(node);
   37514          92 :                 return;
   37515             :         case TAG_MPEG4_AnimationStream:
   37516         126 :                 AnimationStream_Del(node);
   37517         126 :                 return;
   37518             :         case TAG_MPEG4_Appearance:
   37519       21658 :                 Appearance_Del(node);
   37520       21658 :                 return;
   37521             :         case TAG_MPEG4_AudioBuffer:
   37522          18 :                 AudioBuffer_Del(node);
   37523          18 :                 return;
   37524             :         case TAG_MPEG4_AudioClip:
   37525          90 :                 AudioClip_Del(node);
   37526          90 :                 return;
   37527             :         case TAG_MPEG4_AudioDelay:
   37528           0 :                 AudioDelay_Del(node);
   37529           0 :                 return;
   37530             :         case TAG_MPEG4_AudioFX:
   37531           0 :                 AudioFX_Del(node);
   37532           0 :                 return;
   37533             :         case TAG_MPEG4_AudioMix:
   37534           0 :                 AudioMix_Del(node);
   37535           0 :                 return;
   37536             :         case TAG_MPEG4_AudioSource:
   37537         125 :                 AudioSource_Del(node);
   37538         125 :                 return;
   37539             :         case TAG_MPEG4_AudioSwitch:
   37540           0 :                 AudioSwitch_Del(node);
   37541           0 :                 return;
   37542             :         case TAG_MPEG4_Background:
   37543          61 :                 Background_Del(node);
   37544          61 :                 return;
   37545             :         case TAG_MPEG4_Background2D:
   37546        5232 :                 Background2D_Del(node);
   37547        5232 :                 return;
   37548             :         case TAG_MPEG4_Billboard:
   37549          54 :                 Billboard_Del(node);
   37550          54 :                 return;
   37551             :         case TAG_MPEG4_Bitmap:
   37552         578 :                 Bitmap_Del(node);
   37553         578 :                 return;
   37554             :         case TAG_MPEG4_Box:
   37555         928 :                 Box_Del(node);
   37556         928 :                 return;
   37557             :         case TAG_MPEG4_Circle:
   37558        2964 :                 Circle_Del(node);
   37559        2964 :                 return;
   37560             :         case TAG_MPEG4_Collision:
   37561          36 :                 Collision_Del(node);
   37562          36 :                 return;
   37563             :         case TAG_MPEG4_Color:
   37564         152 :                 Color_Del(node);
   37565         152 :                 return;
   37566             :         case TAG_MPEG4_ColorInterpolator:
   37567         108 :                 ColorInterpolator_Del(node);
   37568         108 :                 return;
   37569             :         case TAG_MPEG4_CompositeTexture2D:
   37570          82 :                 CompositeTexture2D_Del(node);
   37571          82 :                 return;
   37572             :         case TAG_MPEG4_CompositeTexture3D:
   37573          36 :                 CompositeTexture3D_Del(node);
   37574          36 :                 return;
   37575             :         case TAG_MPEG4_Conditional:
   37576        8859 :                 Conditional_Del(node);
   37577        8859 :                 return;
   37578             :         case TAG_MPEG4_Cone:
   37579         108 :                 Cone_Del(node);
   37580         108 :                 return;
   37581             :         case TAG_MPEG4_Coordinate:
   37582          85 :                 Coordinate_Del(node);
   37583          85 :                 return;
   37584             :         case TAG_MPEG4_Coordinate2D:
   37585        4134 :                 Coordinate2D_Del(node);
   37586        4134 :                 return;
   37587             :         case TAG_MPEG4_CoordinateInterpolator:
   37588           0 :                 CoordinateInterpolator_Del(node);
   37589           0 :                 return;
   37590             :         case TAG_MPEG4_CoordinateInterpolator2D:
   37591          36 :                 CoordinateInterpolator2D_Del(node);
   37592          36 :                 return;
   37593             :         case TAG_MPEG4_Curve2D:
   37594        1740 :                 Curve2D_Del(node);
   37595        1740 :                 return;
   37596             :         case TAG_MPEG4_Cylinder:
   37597         270 :                 Cylinder_Del(node);
   37598         270 :                 return;
   37599             :         case TAG_MPEG4_CylinderSensor:
   37600          18 :                 CylinderSensor_Del(node);
   37601          18 :                 return;
   37602             :         case TAG_MPEG4_DirectionalLight:
   37603          90 :                 DirectionalLight_Del(node);
   37604          90 :                 return;
   37605             :         case TAG_MPEG4_DiscSensor:
   37606          54 :                 DiscSensor_Del(node);
   37607          54 :                 return;
   37608             :         case TAG_MPEG4_ElevationGrid:
   37609          18 :                 ElevationGrid_Del(node);
   37610          18 :                 return;
   37611             :         case TAG_MPEG4_Expression:
   37612           0 :                 Expression_Del(node);
   37613           0 :                 return;
   37614             :         case TAG_MPEG4_Extrusion:
   37615          18 :                 Extrusion_Del(node);
   37616          18 :                 return;
   37617             :         case TAG_MPEG4_Face:
   37618           0 :                 Face_Del(node);
   37619           0 :                 return;
   37620             :         case TAG_MPEG4_FaceDefMesh:
   37621           0 :                 FaceDefMesh_Del(node);
   37622           0 :                 return;
   37623             :         case TAG_MPEG4_FaceDefTables:
   37624           0 :                 FaceDefTables_Del(node);
   37625           0 :                 return;
   37626             :         case TAG_MPEG4_FaceDefTransform:
   37627           0 :                 FaceDefTransform_Del(node);
   37628           0 :                 return;
   37629             :         case TAG_MPEG4_FAP:
   37630           0 :                 FAP_Del(node);
   37631           0 :                 return;
   37632             :         case TAG_MPEG4_FDP:
   37633           0 :                 FDP_Del(node);
   37634           0 :                 return;
   37635             :         case TAG_MPEG4_FIT:
   37636           0 :                 FIT_Del(node);
   37637           0 :                 return;
   37638             :         case TAG_MPEG4_Fog:
   37639          18 :                 Fog_Del(node);
   37640          18 :                 return;
   37641             :         case TAG_MPEG4_FontStyle:
   37642        7836 :                 FontStyle_Del(node);
   37643        7836 :                 return;
   37644             :         case TAG_MPEG4_Form:
   37645         285 :                 Form_Del(node);
   37646         285 :                 return;
   37647             :         case TAG_MPEG4_Group:
   37648        1434 :                 Group_Del(node);
   37649        1434 :                 return;
   37650             :         case TAG_MPEG4_ImageTexture:
   37651        1000 :                 ImageTexture_Del(node);
   37652        1000 :                 return;
   37653             :         case TAG_MPEG4_IndexedFaceSet:
   37654          57 :                 IndexedFaceSet_Del(node);
   37655          57 :                 return;
   37656             :         case TAG_MPEG4_IndexedFaceSet2D:
   37657        1529 :                 IndexedFaceSet2D_Del(node);
   37658        1529 :                 return;
   37659             :         case TAG_MPEG4_IndexedLineSet:
   37660          36 :                 IndexedLineSet_Del(node);
   37661          36 :                 return;
   37662             :         case TAG_MPEG4_IndexedLineSet2D:
   37663         835 :                 IndexedLineSet2D_Del(node);
   37664         835 :                 return;
   37665             :         case TAG_MPEG4_Inline:
   37666         256 :                 Inline_Del(node);
   37667         256 :                 return;
   37668             :         case TAG_MPEG4_LOD:
   37669          18 :                 LOD_Del(node);
   37670          18 :                 return;
   37671             :         case TAG_MPEG4_Layer2D:
   37672         367 :                 Layer2D_Del(node);
   37673         367 :                 return;
   37674             :         case TAG_MPEG4_Layer3D:
   37675          92 :                 Layer3D_Del(node);
   37676          92 :                 return;
   37677             :         case TAG_MPEG4_Layout:
   37678        2520 :                 Layout_Del(node);
   37679        2520 :                 return;
   37680             :         case TAG_MPEG4_LineProperties:
   37681        1348 :                 LineProperties_Del(node);
   37682        1348 :                 return;
   37683             :         case TAG_MPEG4_ListeningPoint:
   37684           0 :                 ListeningPoint_Del(node);
   37685           0 :                 return;
   37686             :         case TAG_MPEG4_Material:
   37687        1419 :                 Material_Del(node);
   37688        1419 :                 return;
   37689             :         case TAG_MPEG4_Material2D:
   37690       17374 :                 Material2D_Del(node);
   37691       17374 :                 return;
   37692             :         case TAG_MPEG4_MovieTexture:
   37693         552 :                 MovieTexture_Del(node);
   37694         552 :                 return;
   37695             :         case TAG_MPEG4_NavigationInfo:
   37696         260 :                 NavigationInfo_Del(node);
   37697         260 :                 return;
   37698             :         case TAG_MPEG4_Normal:
   37699           0 :                 Normal_Del(node);
   37700           0 :                 return;
   37701             :         case TAG_MPEG4_NormalInterpolator:
   37702           0 :                 NormalInterpolator_Del(node);
   37703           0 :                 return;
   37704             :         case TAG_MPEG4_OrderedGroup:
   37705        4754 :                 OrderedGroup_Del(node);
   37706        4754 :                 return;
   37707             :         case TAG_MPEG4_OrientationInterpolator:
   37708         289 :                 OrientationInterpolator_Del(node);
   37709         289 :                 return;
   37710             :         case TAG_MPEG4_PixelTexture:
   37711          72 :                 PixelTexture_Del(node);
   37712          72 :                 return;
   37713             :         case TAG_MPEG4_PlaneSensor:
   37714          18 :                 PlaneSensor_Del(node);
   37715          18 :                 return;
   37716             :         case TAG_MPEG4_PlaneSensor2D:
   37717         279 :                 PlaneSensor2D_Del(node);
   37718         279 :                 return;
   37719             :         case TAG_MPEG4_PointLight:
   37720          18 :                 PointLight_Del(node);
   37721          18 :                 return;
   37722             :         case TAG_MPEG4_PointSet:
   37723          18 :                 PointSet_Del(node);
   37724          18 :                 return;
   37725             :         case TAG_MPEG4_PointSet2D:
   37726          92 :                 PointSet2D_Del(node);
   37727          92 :                 return;
   37728             :         case TAG_MPEG4_PositionInterpolator:
   37729         198 :                 PositionInterpolator_Del(node);
   37730         198 :                 return;
   37731             :         case TAG_MPEG4_PositionInterpolator2D:
   37732         610 :                 PositionInterpolator2D_Del(node);
   37733         610 :                 return;
   37734             :         case TAG_MPEG4_ProximitySensor2D:
   37735          36 :                 ProximitySensor2D_Del(node);
   37736          36 :                 return;
   37737             :         case TAG_MPEG4_ProximitySensor:
   37738          18 :                 ProximitySensor_Del(node);
   37739          18 :                 return;
   37740             :         case TAG_MPEG4_QuantizationParameter:
   37741         123 :                 QuantizationParameter_Del(node);
   37742         123 :                 return;
   37743             :         case TAG_MPEG4_Rectangle:
   37744        7135 :                 Rectangle_Del(node);
   37745        7135 :                 return;
   37746             :         case TAG_MPEG4_ScalarInterpolator:
   37747         759 :                 ScalarInterpolator_Del(node);
   37748         759 :                 return;
   37749             :         case TAG_MPEG4_Script:
   37750         409 :                 Script_Del(node);
   37751         409 :                 return;
   37752             :         case TAG_MPEG4_Shape:
   37753       32371 :                 Shape_Del(node);
   37754       32371 :                 return;
   37755             :         case TAG_MPEG4_Sound:
   37756          36 :                 Sound_Del(node);
   37757          36 :                 return;
   37758             :         case TAG_MPEG4_Sound2D:
   37759         181 :                 Sound2D_Del(node);
   37760         181 :                 return;
   37761             :         case TAG_MPEG4_Sphere:
   37762         198 :                 Sphere_Del(node);
   37763         198 :                 return;
   37764             :         case TAG_MPEG4_SphereSensor:
   37765          18 :                 SphereSensor_Del(node);
   37766          18 :                 return;
   37767             :         case TAG_MPEG4_SpotLight:
   37768          18 :                 SpotLight_Del(node);
   37769          18 :                 return;
   37770             :         case TAG_MPEG4_Switch:
   37771         544 :                 Switch_Del(node);
   37772         544 :                 return;
   37773             :         case TAG_MPEG4_TermCap:
   37774           0 :                 TermCap_Del(node);
   37775           0 :                 return;
   37776             :         case TAG_MPEG4_Text:
   37777       12892 :                 Text_Del(node);
   37778       12892 :                 return;
   37779             :         case TAG_MPEG4_TextureCoordinate:
   37780           0 :                 TextureCoordinate_Del(node);
   37781           0 :                 return;
   37782             :         case TAG_MPEG4_TextureTransform:
   37783         234 :                 TextureTransform_Del(node);
   37784         234 :                 return;
   37785             :         case TAG_MPEG4_TimeSensor:
   37786        1867 :                 TimeSensor_Del(node);
   37787        1867 :                 return;
   37788             :         case TAG_MPEG4_TouchSensor:
   37789        5957 :                 TouchSensor_Del(node);
   37790        5957 :                 return;
   37791             :         case TAG_MPEG4_Transform:
   37792        2471 :                 Transform_Del(node);
   37793        2471 :                 return;
   37794             :         case TAG_MPEG4_Transform2D:
   37795       29181 :                 Transform2D_Del(node);
   37796       29181 :                 return;
   37797             :         case TAG_MPEG4_Valuator:
   37798        6528 :                 Valuator_Del(node);
   37799        6528 :                 return;
   37800             :         case TAG_MPEG4_Viewpoint:
   37801         595 :                 Viewpoint_Del(node);
   37802         595 :                 return;
   37803             :         case TAG_MPEG4_VisibilitySensor:
   37804          18 :                 VisibilitySensor_Del(node);
   37805          18 :                 return;
   37806             :         case TAG_MPEG4_Viseme:
   37807           0 :                 Viseme_Del(node);
   37808           0 :                 return;
   37809             :         case TAG_MPEG4_WorldInfo:
   37810        5346 :                 WorldInfo_Del(node);
   37811        5346 :                 return;
   37812             :         case TAG_MPEG4_AcousticMaterial:
   37813           0 :                 AcousticMaterial_Del(node);
   37814           0 :                 return;
   37815             :         case TAG_MPEG4_AcousticScene:
   37816           0 :                 AcousticScene_Del(node);
   37817           0 :                 return;
   37818             :         case TAG_MPEG4_ApplicationWindow:
   37819           0 :                 ApplicationWindow_Del(node);
   37820           0 :                 return;
   37821             :         case TAG_MPEG4_BAP:
   37822           0 :                 BAP_Del(node);
   37823           0 :                 return;
   37824             :         case TAG_MPEG4_BDP:
   37825           0 :                 BDP_Del(node);
   37826           0 :                 return;
   37827             :         case TAG_MPEG4_Body:
   37828           0 :                 Body_Del(node);
   37829           0 :                 return;
   37830             :         case TAG_MPEG4_BodyDefTable:
   37831           0 :                 BodyDefTable_Del(node);
   37832           0 :                 return;
   37833             :         case TAG_MPEG4_BodySegmentConnectionHint:
   37834           0 :                 BodySegmentConnectionHint_Del(node);
   37835           0 :                 return;
   37836             :         case TAG_MPEG4_DirectiveSound:
   37837           0 :                 DirectiveSound_Del(node);
   37838           0 :                 return;
   37839             :         case TAG_MPEG4_Hierarchical3DMesh:
   37840           0 :                 Hierarchical3DMesh_Del(node);
   37841           0 :                 return;
   37842             :         case TAG_MPEG4_MaterialKey:
   37843          18 :                 MaterialKey_Del(node);
   37844          18 :                 return;
   37845             :         case TAG_MPEG4_PerceptualParameters:
   37846           0 :                 PerceptualParameters_Del(node);
   37847           0 :                 return;
   37848             :         case TAG_MPEG4_TemporalTransform:
   37849           0 :                 TemporalTransform_Del(node);
   37850           0 :                 return;
   37851             :         case TAG_MPEG4_TemporalGroup:
   37852           0 :                 TemporalGroup_Del(node);
   37853           0 :                 return;
   37854             :         case TAG_MPEG4_ServerCommand:
   37855           0 :                 ServerCommand_Del(node);
   37856           0 :                 return;
   37857             :         case TAG_MPEG4_InputSensor:
   37858          54 :                 InputSensor_Del(node);
   37859          54 :                 return;
   37860             :         case TAG_MPEG4_MatteTexture:
   37861           0 :                 MatteTexture_Del(node);
   37862           0 :                 return;
   37863             :         case TAG_MPEG4_MediaBuffer:
   37864           0 :                 MediaBuffer_Del(node);
   37865           0 :                 return;
   37866             :         case TAG_MPEG4_MediaControl:
   37867         277 :                 MediaControl_Del(node);
   37868         277 :                 return;
   37869             :         case TAG_MPEG4_MediaSensor:
   37870         240 :                 MediaSensor_Del(node);
   37871         240 :                 return;
   37872             :         case TAG_MPEG4_BitWrapper:
   37873           0 :                 BitWrapper_Del(node);
   37874           0 :                 return;
   37875             :         case TAG_MPEG4_CoordinateInterpolator4D:
   37876           0 :                 CoordinateInterpolator4D_Del(node);
   37877           0 :                 return;
   37878             :         case TAG_MPEG4_DepthImage:
   37879           0 :                 DepthImage_Del(node);
   37880           0 :                 return;
   37881             :         case TAG_MPEG4_FFD:
   37882           0 :                 FFD_Del(node);
   37883           0 :                 return;
   37884             :         case TAG_MPEG4_Implicit:
   37885           0 :                 Implicit_Del(node);
   37886           0 :                 return;
   37887             :         case TAG_MPEG4_XXLFM_Appearance:
   37888           0 :                 XXLFM_Appearance_Del(node);
   37889           0 :                 return;
   37890             :         case TAG_MPEG4_XXLFM_BlendList:
   37891           0 :                 XXLFM_BlendList_Del(node);
   37892           0 :                 return;
   37893             :         case TAG_MPEG4_XXLFM_FrameList:
   37894           0 :                 XXLFM_FrameList_Del(node);
   37895           0 :                 return;
   37896             :         case TAG_MPEG4_XXLFM_LightMap:
   37897           0 :                 XXLFM_LightMap_Del(node);
   37898           0 :                 return;
   37899             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   37900           0 :                 XXLFM_SurfaceMapList_Del(node);
   37901           0 :                 return;
   37902             :         case TAG_MPEG4_XXLFM_ViewMapList:
   37903           0 :                 XXLFM_ViewMapList_Del(node);
   37904           0 :                 return;
   37905             :         case TAG_MPEG4_MeshGrid:
   37906           0 :                 MeshGrid_Del(node);
   37907           0 :                 return;
   37908             :         case TAG_MPEG4_NonLinearDeformer:
   37909          23 :                 NonLinearDeformer_Del(node);
   37910          23 :                 return;
   37911             :         case TAG_MPEG4_NurbsCurve:
   37912           0 :                 NurbsCurve_Del(node);
   37913           0 :                 return;
   37914             :         case TAG_MPEG4_NurbsCurve2D:
   37915           0 :                 NurbsCurve2D_Del(node);
   37916           0 :                 return;
   37917             :         case TAG_MPEG4_NurbsSurface:
   37918           0 :                 NurbsSurface_Del(node);
   37919           0 :                 return;
   37920             :         case TAG_MPEG4_OctreeImage:
   37921           0 :                 OctreeImage_Del(node);
   37922           0 :                 return;
   37923             :         case TAG_MPEG4_XXParticles:
   37924           0 :                 XXParticles_Del(node);
   37925           0 :                 return;
   37926             :         case TAG_MPEG4_XXParticleInitBox:
   37927           0 :                 XXParticleInitBox_Del(node);
   37928           0 :                 return;
   37929             :         case TAG_MPEG4_XXPlanarObstacle:
   37930           0 :                 XXPlanarObstacle_Del(node);
   37931           0 :                 return;
   37932             :         case TAG_MPEG4_XXPointAttractor:
   37933           0 :                 XXPointAttractor_Del(node);
   37934           0 :                 return;
   37935             :         case TAG_MPEG4_PointTexture:
   37936           0 :                 PointTexture_Del(node);
   37937           0 :                 return;
   37938             :         case TAG_MPEG4_PositionAnimator:
   37939          18 :                 PositionAnimator_Del(node);
   37940          18 :                 return;
   37941             :         case TAG_MPEG4_PositionAnimator2D:
   37942          18 :                 PositionAnimator2D_Del(node);
   37943          18 :                 return;
   37944             :         case TAG_MPEG4_PositionInterpolator4D:
   37945           0 :                 PositionInterpolator4D_Del(node);
   37946           0 :                 return;
   37947             :         case TAG_MPEG4_ProceduralTexture:
   37948           0 :                 ProceduralTexture_Del(node);
   37949           0 :                 return;
   37950             :         case TAG_MPEG4_Quadric:
   37951           0 :                 Quadric_Del(node);
   37952           0 :                 return;
   37953             :         case TAG_MPEG4_SBBone:
   37954           0 :                 SBBone_Del(node);
   37955           0 :                 return;
   37956             :         case TAG_MPEG4_SBMuscle:
   37957           0 :                 SBMuscle_Del(node);
   37958           0 :                 return;
   37959             :         case TAG_MPEG4_SBSegment:
   37960           0 :                 SBSegment_Del(node);
   37961           0 :                 return;
   37962             :         case TAG_MPEG4_SBSite:
   37963           0 :                 SBSite_Del(node);
   37964           0 :                 return;
   37965             :         case TAG_MPEG4_SBSkinnedModel:
   37966           0 :                 SBSkinnedModel_Del(node);
   37967           0 :                 return;
   37968             :         case TAG_MPEG4_SBVCAnimation:
   37969           0 :                 SBVCAnimation_Del(node);
   37970           0 :                 return;
   37971             :         case TAG_MPEG4_ScalarAnimator:
   37972          18 :                 ScalarAnimator_Del(node);
   37973          18 :                 return;
   37974             :         case TAG_MPEG4_SimpleTexture:
   37975           0 :                 SimpleTexture_Del(node);
   37976           0 :                 return;
   37977             :         case TAG_MPEG4_SolidRep:
   37978           0 :                 SolidRep_Del(node);
   37979           0 :                 return;
   37980             :         case TAG_MPEG4_SubdivisionSurface:
   37981           0 :                 SubdivisionSurface_Del(node);
   37982           0 :                 return;
   37983             :         case TAG_MPEG4_SubdivSurfaceSector:
   37984           0 :                 SubdivSurfaceSector_Del(node);
   37985           0 :                 return;
   37986             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   37987           0 :                 WaveletSubdivisionSurface_Del(node);
   37988           0 :                 return;
   37989             :         case TAG_MPEG4_Clipper2D:
   37990          36 :                 Clipper2D_Del(node);
   37991          36 :                 return;
   37992             :         case TAG_MPEG4_ColorTransform:
   37993          99 :                 ColorTransform_Del(node);
   37994          99 :                 return;
   37995             :         case TAG_MPEG4_Ellipse:
   37996          36 :                 Ellipse_Del(node);
   37997          36 :                 return;
   37998             :         case TAG_MPEG4_LinearGradient:
   37999         110 :                 LinearGradient_Del(node);
   38000         110 :                 return;
   38001             :         case TAG_MPEG4_PathLayout:
   38002          36 :                 PathLayout_Del(node);
   38003          36 :                 return;
   38004             :         case TAG_MPEG4_RadialGradient:
   38005         144 :                 RadialGradient_Del(node);
   38006         144 :                 return;
   38007             :         case TAG_MPEG4_SynthesizedTexture:
   38008           0 :                 SynthesizedTexture_Del(node);
   38009           0 :                 return;
   38010             :         case TAG_MPEG4_TransformMatrix2D:
   38011        1966 :                 TransformMatrix2D_Del(node);
   38012        1966 :                 return;
   38013             :         case TAG_MPEG4_Viewport:
   38014         311 :                 Viewport_Del(node);
   38015         311 :                 return;
   38016             :         case TAG_MPEG4_XCurve2D:
   38017          98 :                 XCurve2D_Del(node);
   38018          98 :                 return;
   38019             :         case TAG_MPEG4_XFontStyle:
   38020           0 :                 XFontStyle_Del(node);
   38021           0 :                 return;
   38022             :         case TAG_MPEG4_XLineProperties:
   38023         480 :                 XLineProperties_Del(node);
   38024         480 :                 return;
   38025             :         case TAG_MPEG4_AdvancedAudioBuffer:
   38026           0 :                 AdvancedAudioBuffer_Del(node);
   38027           0 :                 return;
   38028             :         case TAG_MPEG4_AudioChannelConfig:
   38029           0 :                 AudioChannelConfig_Del(node);
   38030           0 :                 return;
   38031             :         case TAG_MPEG4_DepthImageV2:
   38032           0 :                 DepthImageV2_Del(node);
   38033           0 :                 return;
   38034             :         case TAG_MPEG4_MorphShape:
   38035           0 :                 MorphShape_Del(node);
   38036           0 :                 return;
   38037             :         case TAG_MPEG4_MultiTexture:
   38038           0 :                 MultiTexture_Del(node);
   38039           0 :                 return;
   38040             :         case TAG_MPEG4_PointTextureV2:
   38041           0 :                 PointTextureV2_Del(node);
   38042           0 :                 return;
   38043             :         case TAG_MPEG4_SBVCAnimationV2:
   38044           0 :                 SBVCAnimationV2_Del(node);
   38045           0 :                 return;
   38046             :         case TAG_MPEG4_SimpleTextureV2:
   38047           0 :                 SimpleTextureV2_Del(node);
   38048           0 :                 return;
   38049             :         case TAG_MPEG4_SurroundingSound:
   38050           0 :                 SurroundingSound_Del(node);
   38051           0 :                 return;
   38052             :         case TAG_MPEG4_Transform3DAudio:
   38053           0 :                 Transform3DAudio_Del(node);
   38054           0 :                 return;
   38055             :         case TAG_MPEG4_WideSound:
   38056           0 :                 WideSound_Del(node);
   38057           0 :                 return;
   38058             :         case TAG_MPEG4_ScoreShape:
   38059           0 :                 ScoreShape_Del(node);
   38060           0 :                 return;
   38061             :         case TAG_MPEG4_MusicScore:
   38062           0 :                 MusicScore_Del(node);
   38063           0 :                 return;
   38064             :         case TAG_MPEG4_FootPrintSetNode:
   38065           0 :                 FootPrintSetNode_Del(node);
   38066           0 :                 return;
   38067             :         case TAG_MPEG4_FootPrintNode:
   38068           0 :                 FootPrintNode_Del(node);
   38069           0 :                 return;
   38070             :         case TAG_MPEG4_BuildingPartNode:
   38071           0 :                 BuildingPartNode_Del(node);
   38072           0 :                 return;
   38073             :         case TAG_MPEG4_RoofNode:
   38074           0 :                 RoofNode_Del(node);
   38075           0 :                 return;
   38076             :         case TAG_MPEG4_FacadeNode:
   38077           0 :                 FacadeNode_Del(node);
   38078           0 :                 return;
   38079             :         case TAG_MPEG4_Shadow:
   38080           0 :                 Shadow_Del(node);
   38081           0 :                 return;
   38082             :         case TAG_MPEG4_CacheTexture:
   38083          36 :                 CacheTexture_Del(node);
   38084          36 :                 return;
   38085             :         case TAG_MPEG4_EnvironmentTest:
   38086          54 :                 EnvironmentTest_Del(node);
   38087          54 :                 return;
   38088             :         case TAG_MPEG4_KeyNavigator:
   38089          66 :                 KeyNavigator_Del(node);
   38090          66 :                 return;
   38091             :         case TAG_MPEG4_SpacePartition:
   38092           0 :                 SpacePartition_Del(node);
   38093           0 :                 return;
   38094             :         case TAG_MPEG4_Storage:
   38095          18 :                 Storage_Del(node);
   38096          18 :                 return;
   38097             :         default:
   38098             :                 return;
   38099             :         }
   38100      202445 : }
   38101             : 
   38102             : u32 gf_sg_mpeg4_node_get_field_count(GF_Node *node, u8 code_mode)
   38103             : {
   38104      412958 :         switch (node->sgprivate->tag) {
   38105             :         case TAG_MPEG4_Anchor:
   38106          82 :                 return Anchor_get_field_count(node, code_mode);
   38107             :         case TAG_MPEG4_AnimationStream:
   38108         168 :                 return AnimationStream_get_field_count(node, code_mode);
   38109             :         case TAG_MPEG4_Appearance:
   38110       19001 :                 return Appearance_get_field_count(node, code_mode);
   38111             :         case TAG_MPEG4_AudioBuffer:
   38112          61 :                 return AudioBuffer_get_field_count(node, code_mode);
   38113             :         case TAG_MPEG4_AudioClip:
   38114         116 :                 return AudioClip_get_field_count(node, code_mode);
   38115             :         case TAG_MPEG4_AudioDelay:
   38116           0 :                 return AudioDelay_get_field_count(node, code_mode);
   38117             :         case TAG_MPEG4_AudioFX:
   38118           0 :                 return AudioFX_get_field_count(node, code_mode);
   38119             :         case TAG_MPEG4_AudioMix:
   38120           0 :                 return AudioMix_get_field_count(node, code_mode);
   38121             :         case TAG_MPEG4_AudioSource:
   38122         172 :                 return AudioSource_get_field_count(node, code_mode);
   38123             :         case TAG_MPEG4_AudioSwitch:
   38124           0 :                 return AudioSwitch_get_field_count(node, code_mode);
   38125             :         case TAG_MPEG4_Background:
   38126          62 :                 return Background_get_field_count(node, code_mode);
   38127             :         case TAG_MPEG4_Background2D:
   38128        4832 :                 return Background2D_get_field_count(node, code_mode);
   38129             :         case TAG_MPEG4_Billboard:
   38130          48 :                 return Billboard_get_field_count(node, code_mode);
   38131             :         case TAG_MPEG4_Bitmap:
   38132         541 :                 return Bitmap_get_field_count(node, code_mode);
   38133             :         case TAG_MPEG4_Box:
   38134         842 :                 return Box_get_field_count(node, code_mode);
   38135             :         case TAG_MPEG4_Circle:
   38136        2766 :                 return Circle_get_field_count(node, code_mode);
   38137             :         case TAG_MPEG4_Collision:
   38138          50 :                 return Collision_get_field_count(node, code_mode);
   38139             :         case TAG_MPEG4_Color:
   38140         134 :                 return Color_get_field_count(node, code_mode);
   38141             :         case TAG_MPEG4_ColorInterpolator:
   38142         204 :                 return ColorInterpolator_get_field_count(node, code_mode);
   38143             :         case TAG_MPEG4_CompositeTexture2D:
   38144          67 :                 return CompositeTexture2D_get_field_count(node, code_mode);
   38145             :         case TAG_MPEG4_CompositeTexture3D:
   38146          32 :                 return CompositeTexture3D_get_field_count(node, code_mode);
   38147             :         case TAG_MPEG4_Conditional:
   38148       12155 :                 return Conditional_get_field_count(node, code_mode);
   38149             :         case TAG_MPEG4_Cone:
   38150          96 :                 return Cone_get_field_count(node, code_mode);
   38151             :         case TAG_MPEG4_Coordinate:
   38152          73 :                 return Coordinate_get_field_count(node, code_mode);
   38153             :         case TAG_MPEG4_Coordinate2D:
   38154        3928 :                 return Coordinate2D_get_field_count(node, code_mode);
   38155             :         case TAG_MPEG4_CoordinateInterpolator:
   38156           0 :                 return CoordinateInterpolator_get_field_count(node, code_mode);
   38157             :         case TAG_MPEG4_CoordinateInterpolator2D:
   38158          68 :                 return CoordinateInterpolator2D_get_field_count(node, code_mode);
   38159             :         case TAG_MPEG4_Curve2D:
   38160        1699 :                 return Curve2D_get_field_count(node, code_mode);
   38161             :         case TAG_MPEG4_Cylinder:
   38162         240 :                 return Cylinder_get_field_count(node, code_mode);
   38163             :         case TAG_MPEG4_CylinderSensor:
   38164          52 :                 return CylinderSensor_get_field_count(node, code_mode);
   38165             :         case TAG_MPEG4_DirectionalLight:
   38166          89 :                 return DirectionalLight_get_field_count(node, code_mode);
   38167             :         case TAG_MPEG4_DiscSensor:
   38168          75 :                 return DiscSensor_get_field_count(node, code_mode);
   38169             :         case TAG_MPEG4_ElevationGrid:
   38170          16 :                 return ElevationGrid_get_field_count(node, code_mode);
   38171             :         case TAG_MPEG4_Expression:
   38172           0 :                 return Expression_get_field_count(node, code_mode);
   38173             :         case TAG_MPEG4_Extrusion:
   38174          16 :                 return Extrusion_get_field_count(node, code_mode);
   38175             :         case TAG_MPEG4_Face:
   38176           0 :                 return Face_get_field_count(node, code_mode);
   38177             :         case TAG_MPEG4_FaceDefMesh:
   38178           0 :                 return FaceDefMesh_get_field_count(node, code_mode);
   38179             :         case TAG_MPEG4_FaceDefTables:
   38180           0 :                 return FaceDefTables_get_field_count(node, code_mode);
   38181             :         case TAG_MPEG4_FaceDefTransform:
   38182           0 :                 return FaceDefTransform_get_field_count(node, code_mode);
   38183             :         case TAG_MPEG4_FAP:
   38184           0 :                 return FAP_get_field_count(node, code_mode);
   38185             :         case TAG_MPEG4_FDP:
   38186           0 :                 return FDP_get_field_count(node, code_mode);
   38187             :         case TAG_MPEG4_FIT:
   38188           0 :                 return FIT_get_field_count(node, code_mode);
   38189             :         case TAG_MPEG4_Fog:
   38190          34 :                 return Fog_get_field_count(node, code_mode);
   38191             :         case TAG_MPEG4_FontStyle:
   38192        6569 :                 return FontStyle_get_field_count(node, code_mode);
   38193             :         case TAG_MPEG4_Form:
   38194         249 :                 return Form_get_field_count(node, code_mode);
   38195             :         case TAG_MPEG4_Group:
   38196        1266 :                 return Group_get_field_count(node, code_mode);
   38197             :         case TAG_MPEG4_ImageTexture:
   38198         943 :                 return ImageTexture_get_field_count(node, code_mode);
   38199             :         case TAG_MPEG4_IndexedFaceSet:
   38200          51 :                 return IndexedFaceSet_get_field_count(node, code_mode);
   38201             :         case TAG_MPEG4_IndexedFaceSet2D:
   38202        1391 :                 return IndexedFaceSet2D_get_field_count(node, code_mode);
   38203             :         case TAG_MPEG4_IndexedLineSet:
   38204          32 :                 return IndexedLineSet_get_field_count(node, code_mode);
   38205             :         case TAG_MPEG4_IndexedLineSet2D:
   38206         759 :                 return IndexedLineSet2D_get_field_count(node, code_mode);
   38207             :         case TAG_MPEG4_Inline:
   38208         199 :                 return Inline_get_field_count(node, code_mode);
   38209             :         case TAG_MPEG4_LOD:
   38210          16 :                 return LOD_get_field_count(node, code_mode);
   38211             :         case TAG_MPEG4_Layer2D:
   38212         332 :                 return Layer2D_get_field_count(node, code_mode);
   38213             :         case TAG_MPEG4_Layer3D:
   38214          82 :                 return Layer3D_get_field_count(node, code_mode);
   38215             :         case TAG_MPEG4_Layout:
   38216        2492 :                 return Layout_get_field_count(node, code_mode);
   38217             :         case TAG_MPEG4_LineProperties:
   38218        1283 :                 return LineProperties_get_field_count(node, code_mode);
   38219             :         case TAG_MPEG4_ListeningPoint:
   38220           0 :                 return ListeningPoint_get_field_count(node, code_mode);
   38221             :         case TAG_MPEG4_Material:
   38222        1488 :                 return Material_get_field_count(node, code_mode);
   38223             :         case TAG_MPEG4_Material2D:
   38224       16862 :                 return Material2D_get_field_count(node, code_mode);
   38225             :         case TAG_MPEG4_MovieTexture:
   38226         552 :                 return MovieTexture_get_field_count(node, code_mode);
   38227             :         case TAG_MPEG4_NavigationInfo:
   38228         230 :                 return NavigationInfo_get_field_count(node, code_mode);
   38229             :         case TAG_MPEG4_Normal:
   38230           0 :                 return Normal_get_field_count(node, code_mode);
   38231             :         case TAG_MPEG4_NormalInterpolator:
   38232           0 :                 return NormalInterpolator_get_field_count(node, code_mode);
   38233             :         case TAG_MPEG4_OrderedGroup:
   38234        4281 :                 return OrderedGroup_get_field_count(node, code_mode);
   38235             :         case TAG_MPEG4_OrientationInterpolator:
   38236         554 :                 return OrientationInterpolator_get_field_count(node, code_mode);
   38237             :         case TAG_MPEG4_PixelTexture:
   38238          64 :                 return PixelTexture_get_field_count(node, code_mode);
   38239             :         case TAG_MPEG4_PlaneSensor:
   38240          52 :                 return PlaneSensor_get_field_count(node, code_mode);
   38241             :         case TAG_MPEG4_PlaneSensor2D:
   38242         395 :                 return PlaneSensor2D_get_field_count(node, code_mode);
   38243             :         case TAG_MPEG4_PointLight:
   38244          25 :                 return PointLight_get_field_count(node, code_mode);
   38245             :         case TAG_MPEG4_PointSet:
   38246          16 :                 return PointSet_get_field_count(node, code_mode);
   38247             :         case TAG_MPEG4_PointSet2D:
   38248          82 :                 return PointSet2D_get_field_count(node, code_mode);
   38249             :         case TAG_MPEG4_PositionInterpolator:
   38250         374 :                 return PositionInterpolator_get_field_count(node, code_mode);
   38251             :         case TAG_MPEG4_PositionInterpolator2D:
   38252        1129 :                 return PositionInterpolator2D_get_field_count(node, code_mode);
   38253             :         case TAG_MPEG4_ProximitySensor2D:
   38254          68 :                 return ProximitySensor2D_get_field_count(node, code_mode);
   38255             :         case TAG_MPEG4_ProximitySensor:
   38256          34 :                 return ProximitySensor_get_field_count(node, code_mode);
   38257             :         case TAG_MPEG4_QuantizationParameter:
   38258         109 :                 return QuantizationParameter_get_field_count(node, code_mode);
   38259             :         case TAG_MPEG4_Rectangle:
   38260        6505 :                 return Rectangle_get_field_count(node, code_mode);
   38261             :         case TAG_MPEG4_ScalarInterpolator:
   38262        1514 :                 return ScalarInterpolator_get_field_count(node, code_mode);
   38263             :         case TAG_MPEG4_Script:
   38264           0 :                 return Script_get_field_count(node, code_mode);
   38265             :         case TAG_MPEG4_Shape:
   38266       28084 :                 return Shape_get_field_count(node, code_mode);
   38267             :         case TAG_MPEG4_Sound:
   38268          32 :                 return Sound_get_field_count(node, code_mode);
   38269             :         case TAG_MPEG4_Sound2D:
   38270         161 :                 return Sound2D_get_field_count(node, code_mode);
   38271             :         case TAG_MPEG4_Sphere:
   38272         176 :                 return Sphere_get_field_count(node, code_mode);
   38273             :         case TAG_MPEG4_SphereSensor:
   38274          52 :                 return SphereSensor_get_field_count(node, code_mode);
   38275             :         case TAG_MPEG4_SpotLight:
   38276          25 :                 return SpotLight_get_field_count(node, code_mode);
   38277             :         case TAG_MPEG4_Switch:
   38278        1145 :                 return Switch_get_field_count(node, code_mode);
   38279             :         case TAG_MPEG4_TermCap:
   38280           0 :                 return TermCap_get_field_count(node, code_mode);
   38281             :         case TAG_MPEG4_Text:
   38282       12383 :                 return Text_get_field_count(node, code_mode);
   38283             :         case TAG_MPEG4_TextureCoordinate:
   38284           0 :                 return TextureCoordinate_get_field_count(node, code_mode);
   38285             :         case TAG_MPEG4_TextureTransform:
   38286         262 :                 return TextureTransform_get_field_count(node, code_mode);
   38287             :         case TAG_MPEG4_TimeSensor:
   38288        3148 :                 return TimeSensor_get_field_count(node, code_mode);
   38289             :         case TAG_MPEG4_TouchSensor:
   38290       10068 :                 return TouchSensor_get_field_count(node, code_mode);
   38291             :         case TAG_MPEG4_Transform:
   38292        2388 :                 return Transform_get_field_count(node, code_mode);
   38293             :         case TAG_MPEG4_Transform2D:
   38294       28608 :                 return Transform2D_get_field_count(node, code_mode);
   38295             :         case TAG_MPEG4_Valuator:
   38296       11724 :                 return Valuator_get_field_count(node, code_mode);
   38297             :         case TAG_MPEG4_Viewpoint:
   38298         601 :                 return Viewpoint_get_field_count(node, code_mode);
   38299             :         case TAG_MPEG4_VisibilitySensor:
   38300          34 :                 return VisibilitySensor_get_field_count(node, code_mode);
   38301             :         case TAG_MPEG4_Viseme:
   38302           0 :                 return Viseme_get_field_count(node, code_mode);
   38303             :         case TAG_MPEG4_WorldInfo:
   38304        4762 :                 return WorldInfo_get_field_count(node, code_mode);
   38305             :         case TAG_MPEG4_AcousticMaterial:
   38306           0 :                 return AcousticMaterial_get_field_count(node, code_mode);
   38307             :         case TAG_MPEG4_AcousticScene:
   38308           0 :                 return AcousticScene_get_field_count(node, code_mode);
   38309             :         case TAG_MPEG4_ApplicationWindow:
   38310           0 :                 return ApplicationWindow_get_field_count(node, code_mode);
   38311             :         case TAG_MPEG4_BAP:
   38312           0 :                 return BAP_get_field_count(node, code_mode);
   38313             :         case TAG_MPEG4_BDP:
   38314           0 :                 return BDP_get_field_count(node, code_mode);
   38315             :         case TAG_MPEG4_Body:
   38316           0 :                 return Body_get_field_count(node, code_mode);
   38317             :         case TAG_MPEG4_BodyDefTable:
   38318           0 :                 return BodyDefTable_get_field_count(node, code_mode);
   38319             :         case TAG_MPEG4_BodySegmentConnectionHint:
   38320           0 :                 return BodySegmentConnectionHint_get_field_count(node, code_mode);
   38321             :         case TAG_MPEG4_DirectiveSound:
   38322           0 :                 return DirectiveSound_get_field_count(node, code_mode);
   38323             :         case TAG_MPEG4_Hierarchical3DMesh:
   38324           0 :                 return Hierarchical3DMesh_get_field_count(node, code_mode);
   38325             :         case TAG_MPEG4_MaterialKey:
   38326          16 :                 return MaterialKey_get_field_count(node, code_mode);
   38327             :         case TAG_MPEG4_PerceptualParameters:
   38328           0 :                 return PerceptualParameters_get_field_count(node, code_mode);
   38329             :         case TAG_MPEG4_TemporalTransform:
   38330           0 :                 return TemporalTransform_get_field_count(node, code_mode);
   38331             :         case TAG_MPEG4_TemporalGroup:
   38332           0 :                 return TemporalGroup_get_field_count(node, code_mode);
   38333             :         case TAG_MPEG4_ServerCommand:
   38334           0 :                 return ServerCommand_get_field_count(node, code_mode);
   38335             :         case TAG_MPEG4_InputSensor:
   38336          48 :                 return InputSensor_get_field_count(node, code_mode);
   38337             :         case TAG_MPEG4_MatteTexture:
   38338           0 :                 return MatteTexture_get_field_count(node, code_mode);
   38339             :         case TAG_MPEG4_MediaBuffer:
   38340           0 :                 return MediaBuffer_get_field_count(node, code_mode);
   38341             :         case TAG_MPEG4_MediaControl:
   38342         391 :                 return MediaControl_get_field_count(node, code_mode);
   38343             :         case TAG_MPEG4_MediaSensor:
   38344         454 :                 return MediaSensor_get_field_count(node, code_mode);
   38345             :         case TAG_MPEG4_BitWrapper:
   38346           0 :                 return BitWrapper_get_field_count(node, code_mode);
   38347             :         case TAG_MPEG4_CoordinateInterpolator4D:
   38348           0 :                 return CoordinateInterpolator4D_get_field_count(node, code_mode);
   38349             :         case TAG_MPEG4_DepthImage:
   38350           0 :                 return DepthImage_get_field_count(node, code_mode);
   38351             :         case TAG_MPEG4_FFD:
   38352           0 :                 return FFD_get_field_count(node, code_mode);
   38353             :         case TAG_MPEG4_Implicit:
   38354           0 :                 return Implicit_get_field_count(node, code_mode);
   38355             :         case TAG_MPEG4_XXLFM_Appearance:
   38356           0 :                 return XXLFM_Appearance_get_field_count(node, code_mode);
   38357             :         case TAG_MPEG4_XXLFM_BlendList:
   38358           0 :                 return XXLFM_BlendList_get_field_count(node, code_mode);
   38359             :         case TAG_MPEG4_XXLFM_FrameList:
   38360           0 :                 return XXLFM_FrameList_get_field_count(node, code_mode);
   38361             :         case TAG_MPEG4_XXLFM_LightMap:
   38362           0 :                 return XXLFM_LightMap_get_field_count(node, code_mode);
   38363             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   38364           0 :                 return XXLFM_SurfaceMapList_get_field_count(node, code_mode);
   38365             :         case TAG_MPEG4_XXLFM_ViewMapList:
   38366           0 :                 return XXLFM_ViewMapList_get_field_count(node, code_mode);
   38367             :         case TAG_MPEG4_MeshGrid:
   38368           0 :                 return MeshGrid_get_field_count(node, code_mode);
   38369             :         case TAG_MPEG4_NonLinearDeformer:
   38370          28 :                 return NonLinearDeformer_get_field_count(node, code_mode);
   38371             :         case TAG_MPEG4_NurbsCurve:
   38372           0 :                 return NurbsCurve_get_field_count(node, code_mode);
   38373             :         case TAG_MPEG4_NurbsCurve2D:
   38374           0 :                 return NurbsCurve2D_get_field_count(node, code_mode);
   38375             :         case TAG_MPEG4_NurbsSurface:
   38376           0 :                 return NurbsSurface_get_field_count(node, code_mode);
   38377             :         case TAG_MPEG4_OctreeImage:
   38378           0 :                 return OctreeImage_get_field_count(node, code_mode);
   38379             :         case TAG_MPEG4_XXParticles:
   38380           0 :                 return XXParticles_get_field_count(node, code_mode);
   38381             :         case TAG_MPEG4_XXParticleInitBox:
   38382           0 :                 return XXParticleInitBox_get_field_count(node, code_mode);
   38383             :         case TAG_MPEG4_XXPlanarObstacle:
   38384           0 :                 return XXPlanarObstacle_get_field_count(node, code_mode);
   38385             :         case TAG_MPEG4_XXPointAttractor:
   38386           0 :                 return XXPointAttractor_get_field_count(node, code_mode);
   38387             :         case TAG_MPEG4_PointTexture:
   38388           0 :                 return PointTexture_get_field_count(node, code_mode);
   38389             :         case TAG_MPEG4_PositionAnimator:
   38390          34 :                 return PositionAnimator_get_field_count(node, code_mode);
   38391             :         case TAG_MPEG4_PositionAnimator2D:
   38392          34 :                 return PositionAnimator2D_get_field_count(node, code_mode);
   38393             :         case TAG_MPEG4_PositionInterpolator4D:
   38394           0 :                 return PositionInterpolator4D_get_field_count(node, code_mode);
   38395             :         case TAG_MPEG4_ProceduralTexture:
   38396           0 :                 return ProceduralTexture_get_field_count(node, code_mode);
   38397             :         case TAG_MPEG4_Quadric:
   38398           0 :                 return Quadric_get_field_count(node, code_mode);
   38399             :         case TAG_MPEG4_SBBone:
   38400           0 :                 return SBBone_get_field_count(node, code_mode);
   38401             :         case TAG_MPEG4_SBMuscle:
   38402           0 :                 return SBMuscle_get_field_count(node, code_mode);
   38403             :         case TAG_MPEG4_SBSegment:
   38404           0 :                 return SBSegment_get_field_count(node, code_mode);
   38405             :         case TAG_MPEG4_SBSite:
   38406           0 :                 return SBSite_get_field_count(node, code_mode);
   38407             :         case TAG_MPEG4_SBSkinnedModel:
   38408           0 :                 return SBSkinnedModel_get_field_count(node, code_mode);
   38409             :         case TAG_MPEG4_SBVCAnimation:
   38410           0 :                 return SBVCAnimation_get_field_count(node, code_mode);
   38411             :         case TAG_MPEG4_ScalarAnimator:
   38412          34 :                 return ScalarAnimator_get_field_count(node, code_mode);
   38413             :         case TAG_MPEG4_SimpleTexture:
   38414           0 :                 return SimpleTexture_get_field_count(node, code_mode);
   38415             :         case TAG_MPEG4_SolidRep:
   38416           0 :                 return SolidRep_get_field_count(node, code_mode);
   38417             :         case TAG_MPEG4_SubdivisionSurface:
   38418           0 :                 return SubdivisionSurface_get_field_count(node, code_mode);
   38419             :         case TAG_MPEG4_SubdivSurfaceSector:
   38420           0 :                 return SubdivSurfaceSector_get_field_count(node, code_mode);
   38421             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   38422           0 :                 return WaveletSubdivisionSurface_get_field_count(node, code_mode);
   38423             :         case TAG_MPEG4_Clipper2D:
   38424          86 :                 return Clipper2D_get_field_count(node, code_mode);
   38425             :         case TAG_MPEG4_ColorTransform:
   38426         149 :                 return ColorTransform_get_field_count(node, code_mode);
   38427             :         case TAG_MPEG4_Ellipse:
   38428          32 :                 return Ellipse_get_field_count(node, code_mode);
   38429             :         case TAG_MPEG4_LinearGradient:
   38430         187 :                 return LinearGradient_get_field_count(node, code_mode);
   38431             :         case TAG_MPEG4_PathLayout:
   38432         122 :                 return PathLayout_get_field_count(node, code_mode);
   38433             :         case TAG_MPEG4_RadialGradient:
   38434         229 :                 return RadialGradient_get_field_count(node, code_mode);
   38435             :         case TAG_MPEG4_SynthesizedTexture:
   38436           0 :                 return SynthesizedTexture_get_field_count(node, code_mode);
   38437             :         case TAG_MPEG4_TransformMatrix2D:
   38438        2069 :                 return TransformMatrix2D_get_field_count(node, code_mode);
   38439             :         case TAG_MPEG4_Viewport:
   38440         293 :                 return Viewport_get_field_count(node, code_mode);
   38441             :         case TAG_MPEG4_XCurve2D:
   38442          86 :                 return XCurve2D_get_field_count(node, code_mode);
   38443             :         case TAG_MPEG4_XFontStyle:
   38444           0 :                 return XFontStyle_get_field_count(node, code_mode);
   38445             :         case TAG_MPEG4_XLineProperties:
   38446         538 :                 return XLineProperties_get_field_count(node, code_mode);
   38447             :         case TAG_MPEG4_AdvancedAudioBuffer:
   38448           0 :                 return AdvancedAudioBuffer_get_field_count(node, code_mode);
   38449             :         case TAG_MPEG4_AudioChannelConfig:
   38450           0 :                 return AudioChannelConfig_get_field_count(node, code_mode);
   38451             :         case TAG_MPEG4_DepthImageV2:
   38452           0 :                 return DepthImageV2_get_field_count(node, code_mode);
   38453             :         case TAG_MPEG4_MorphShape:
   38454           0 :                 return MorphShape_get_field_count(node, code_mode);
   38455             :         case TAG_MPEG4_MultiTexture:
   38456           0 :                 return MultiTexture_get_field_count(node, code_mode);
   38457             :         case TAG_MPEG4_PointTextureV2:
   38458           0 :                 return PointTextureV2_get_field_count(node, code_mode);
   38459             :         case TAG_MPEG4_SBVCAnimationV2:
   38460           0 :                 return SBVCAnimationV2_get_field_count(node, code_mode);
   38461             :         case TAG_MPEG4_SimpleTextureV2:
   38462           0 :                 return SimpleTextureV2_get_field_count(node, code_mode);
   38463             :         case TAG_MPEG4_SurroundingSound:
   38464           0 :                 return SurroundingSound_get_field_count(node, code_mode);
   38465             :         case TAG_MPEG4_Transform3DAudio:
   38466           0 :                 return Transform3DAudio_get_field_count(node, code_mode);
   38467             :         case TAG_MPEG4_WideSound:
   38468           0 :                 return WideSound_get_field_count(node, code_mode);
   38469             :         case TAG_MPEG4_ScoreShape:
   38470           0 :                 return ScoreShape_get_field_count(node, code_mode);
   38471             :         case TAG_MPEG4_MusicScore:
   38472           0 :                 return MusicScore_get_field_count(node, code_mode);
   38473             :         case TAG_MPEG4_FootPrintSetNode:
   38474           0 :                 return FootPrintSetNode_get_field_count(node, code_mode);
   38475             :         case TAG_MPEG4_FootPrintNode:
   38476           0 :                 return FootPrintNode_get_field_count(node, code_mode);
   38477             :         case TAG_MPEG4_BuildingPartNode:
   38478           0 :                 return BuildingPartNode_get_field_count(node, code_mode);
   38479             :         case TAG_MPEG4_RoofNode:
   38480           0 :                 return RoofNode_get_field_count(node, code_mode);
   38481             :         case TAG_MPEG4_FacadeNode:
   38482           0 :                 return FacadeNode_get_field_count(node, code_mode);
   38483             :         case TAG_MPEG4_Shadow:
   38484           0 :                 return Shadow_get_field_count(node, code_mode);
   38485             :         case TAG_MPEG4_CacheTexture:
   38486          32 :                 return CacheTexture_get_field_count(node, code_mode);
   38487             :         case TAG_MPEG4_EnvironmentTest:
   38488          75 :                 return EnvironmentTest_get_field_count(node, code_mode);
   38489             :         case TAG_MPEG4_KeyNavigator:
   38490         156 :                 return KeyNavigator_get_field_count(node, code_mode);
   38491             :         case TAG_MPEG4_SpacePartition:
   38492           0 :                 return SpacePartition_get_field_count(node, code_mode);
   38493             :         case TAG_MPEG4_Storage:
   38494          16 :                 return Storage_get_field_count(node, code_mode);
   38495             :         default:
   38496           0 :                 return 0;
   38497             :         }
   38498      206479 : }
   38499             : 
   38500             : GF_Err gf_sg_mpeg4_node_get_field(GF_Node *node, GF_FieldInfo *field)
   38501             : {
   38502     2363586 :         switch (node->sgprivate->tag) {
   38503             :         case TAG_MPEG4_Anchor:
   38504         577 :                 return Anchor_get_field(node, field);
   38505             :         case TAG_MPEG4_AnimationStream:
   38506        1102 :                 return AnimationStream_get_field(node, field);
   38507             :         case TAG_MPEG4_Appearance:
   38508       52210 :                 return Appearance_get_field(node, field);
   38509             :         case TAG_MPEG4_AudioBuffer:
   38510         284 :                 return AudioBuffer_get_field(node, field);
   38511             :         case TAG_MPEG4_AudioClip:
   38512         820 :                 return AudioClip_get_field(node, field);
   38513             :         case TAG_MPEG4_AudioDelay:
   38514           0 :                 return AudioDelay_get_field(node, field);
   38515             :         case TAG_MPEG4_AudioFX:
   38516           0 :                 return AudioFX_get_field(node, field);
   38517             :         case TAG_MPEG4_AudioMix:
   38518           0 :                 return AudioMix_get_field(node, field);
   38519             :         case TAG_MPEG4_AudioSource:
   38520        1315 :                 return AudioSource_get_field(node, field);
   38521             :         case TAG_MPEG4_AudioSwitch:
   38522           0 :                 return AudioSwitch_get_field(node, field);
   38523             :         case TAG_MPEG4_Background:
   38524         935 :                 return Background_get_field(node, field);
   38525             :         case TAG_MPEG4_Background2D:
   38526       19358 :                 return Background2D_get_field(node, field);
   38527             :         case TAG_MPEG4_Billboard:
   38528         200 :                 return Billboard_get_field(node, field);
   38529             :         case TAG_MPEG4_Bitmap:
   38530         754 :                 return Bitmap_get_field(node, field);
   38531             :         case TAG_MPEG4_Box:
   38532        1632 :                 return Box_get_field(node, field);
   38533             :         case TAG_MPEG4_Circle:
   38534        5592 :                 return Circle_get_field(node, field);
   38535             :         case TAG_MPEG4_Collision:
   38536         175 :                 return Collision_get_field(node, field);
   38537             :         case TAG_MPEG4_Color:
   38538         276 :                 return Color_get_field(node, field);
   38539             :         case TAG_MPEG4_ColorInterpolator:
   38540         576 :                 return ColorInterpolator_get_field(node, field);
   38541             :         case TAG_MPEG4_CompositeTexture2D:
   38542         702 :                 return CompositeTexture2D_get_field(node, field);
   38543             :         case TAG_MPEG4_CompositeTexture3D:
   38544         352 :                 return CompositeTexture3D_get_field(node, field);
   38545             :         case TAG_MPEG4_Conditional:
   38546       29117 :                 return Conditional_get_field(node, field);
   38547             :         case TAG_MPEG4_Cone:
   38548         657 :                 return Cone_get_field(node, field);
   38549             :         case TAG_MPEG4_Coordinate:
   38550         150 :                 return Coordinate_get_field(node, field);
   38551             :         case TAG_MPEG4_Coordinate2D:
   38552        8183 :                 return Coordinate2D_get_field(node, field);
   38553             :         case TAG_MPEG4_CoordinateInterpolator:
   38554           0 :                 return CoordinateInterpolator_get_field(node, field);
   38555             :         case TAG_MPEG4_CoordinateInterpolator2D:
   38556         192 :                 return CoordinateInterpolator2D_get_field(node, field);
   38557             :         case TAG_MPEG4_Curve2D:
   38558        7917 :                 return Curve2D_get_field(node, field);
   38559             :         case TAG_MPEG4_Cylinder:
   38560        2025 :                 return Cylinder_get_field(node, field);
   38561             :         case TAG_MPEG4_CylinderSensor:
   38562         161 :                 return CylinderSensor_get_field(node, field);
   38563             :         case TAG_MPEG4_DirectionalLight:
   38564         552 :                 return DirectionalLight_get_field(node, field);
   38565             :         case TAG_MPEG4_DiscSensor:
   38566         372 :                 return DiscSensor_get_field(node, field);
   38567             :         case TAG_MPEG4_ElevationGrid:
   38568         304 :                 return ElevationGrid_get_field(node, field);
   38569             :         case TAG_MPEG4_Expression:
   38570           0 :                 return Expression_get_field(node, field);
   38571             :         case TAG_MPEG4_Extrusion:
   38572         300 :                 return Extrusion_get_field(node, field);
   38573             :         case TAG_MPEG4_Face:
   38574           0 :                 return Face_get_field(node, field);
   38575             :         case TAG_MPEG4_FaceDefMesh:
   38576           0 :                 return FaceDefMesh_get_field(node, field);
   38577             :         case TAG_MPEG4_FaceDefTables:
   38578           0 :                 return FaceDefTables_get_field(node, field);
   38579             :         case TAG_MPEG4_FaceDefTransform:
   38580           0 :                 return FaceDefTransform_get_field(node, field);
   38581             :         case TAG_MPEG4_FAP:
   38582           0 :                 return FAP_get_field(node, field);
   38583             :         case TAG_MPEG4_FDP:
   38584           0 :                 return FDP_get_field(node, field);
   38585             :         case TAG_MPEG4_FIT:
   38586           0 :                 return FIT_get_field(node, field);
   38587             :         case TAG_MPEG4_Fog:
   38588         114 :                 return Fog_get_field(node, field);
   38589             :         case TAG_MPEG4_FontStyle:
   38590       92781 :                 return FontStyle_get_field(node, field);
   38591             :         case TAG_MPEG4_Form:
   38592        2649 :                 return Form_get_field(node, field);
   38593             :         case TAG_MPEG4_Group:
   38594        3018 :                 return Group_get_field(node, field);
   38595             :         case TAG_MPEG4_ImageTexture:
   38596        4523 :                 return ImageTexture_get_field(node, field);
   38597             :         case TAG_MPEG4_IndexedFaceSet:
   38598        1000 :                 return IndexedFaceSet_get_field(node, field);
   38599             :         case TAG_MPEG4_IndexedFaceSet2D:
   38600       14480 :                 return IndexedFaceSet2D_get_field(node, field);
   38601             :         case TAG_MPEG4_IndexedLineSet:
   38602         309 :                 return IndexedLineSet_get_field(node, field);
   38603             :         case TAG_MPEG4_IndexedLineSet2D:
   38604        6213 :                 return IndexedLineSet2D_get_field(node, field);
   38605             :         case TAG_MPEG4_Inline:
   38606         468 :                 return Inline_get_field(node, field);
   38607             :         case TAG_MPEG4_LOD:
   38608          77 :                 return LOD_get_field(node, field);
   38609             :         case TAG_MPEG4_Layer2D:
   38610        2326 :                 return Layer2D_get_field(node, field);
   38611             :         case TAG_MPEG4_Layer3D:
   38612         688 :                 return Layer3D_get_field(node, field);
   38613             :         case TAG_MPEG4_Layout:
   38614       45687 :                 return Layout_get_field(node, field);
   38615             :         case TAG_MPEG4_LineProperties:
   38616        5819 :                 return LineProperties_get_field(node, field);
   38617             :         case TAG_MPEG4_ListeningPoint:
   38618           0 :                 return ListeningPoint_get_field(node, field);
   38619             :         case TAG_MPEG4_Material:
   38620       10938 :                 return Material_get_field(node, field);
   38621             :         case TAG_MPEG4_Material2D:
   38622       99444 :                 return Material2D_get_field(node, field);
   38623             :         case TAG_MPEG4_MovieTexture:
   38624        5901 :                 return MovieTexture_get_field(node, field);
   38625             :         case TAG_MPEG4_NavigationInfo:
   38626        1798 :                 return NavigationInfo_get_field(node, field);
   38627             :         case TAG_MPEG4_Normal:
   38628           0 :                 return Normal_get_field(node, field);
   38629             :         case TAG_MPEG4_NormalInterpolator:
   38630           0 :                 return NormalInterpolator_get_field(node, field);
   38631             :         case TAG_MPEG4_OrderedGroup:
   38632       14795 :                 return OrderedGroup_get_field(node, field);
   38633             :         case TAG_MPEG4_OrientationInterpolator:
   38634        1550 :                 return OrientationInterpolator_get_field(node, field);
   38635             :         case TAG_MPEG4_PixelTexture:
   38636         276 :                 return PixelTexture_get_field(node, field);
   38637             :         case TAG_MPEG4_PlaneSensor:
   38638         188 :                 return PlaneSensor_get_field(node, field);
   38639             :         case TAG_MPEG4_PlaneSensor2D:
   38640        2360 :                 return PlaneSensor2D_get_field(node, field);
   38641             :         case TAG_MPEG4_PointLight:
   38642         179 :                 return PointLight_get_field(node, field);
   38643             :         case TAG_MPEG4_PointSet:
   38644          33 :                 return PointSet_get_field(node, field);
   38645             :         case TAG_MPEG4_PointSet2D:
   38646         169 :                 return PointSet2D_get_field(node, field);
   38647             :         case TAG_MPEG4_PositionInterpolator:
   38648        1056 :                 return PositionInterpolator_get_field(node, field);
   38649             :         case TAG_MPEG4_PositionInterpolator2D:
   38650        3232 :                 return PositionInterpolator2D_get_field(node, field);
   38651             :         case TAG_MPEG4_ProximitySensor2D:
   38652         240 :                 return ProximitySensor2D_get_field(node, field);
   38653             :         case TAG_MPEG4_ProximitySensor:
   38654         122 :                 return ProximitySensor_get_field(node, field);
   38655             :         case TAG_MPEG4_QuantizationParameter:
   38656        5310 :                 return QuantizationParameter_get_field(node, field);
   38657             :         case TAG_MPEG4_Rectangle:
   38658       13242 :                 return Rectangle_get_field(node, field);
   38659             :         case TAG_MPEG4_ScalarInterpolator:
   38660        4118 :                 return ScalarInterpolator_get_field(node, field);
   38661             :         case TAG_MPEG4_Script:
   38662        9931 :                 return Script_get_field(node, field);
   38663             :         case TAG_MPEG4_Shape:
   38664       79052 :                 return Shape_get_field(node, field);
   38665             :         case TAG_MPEG4_Sound:
   38666         419 :                 return Sound_get_field(node, field);
   38667             :         case TAG_MPEG4_Sound2D:
   38668         782 :                 return Sound2D_get_field(node, field);
   38669             :         case TAG_MPEG4_Sphere:
   38670         350 :                 return Sphere_get_field(node, field);
   38671             :         case TAG_MPEG4_SphereSensor:
   38672         107 :                 return SphereSensor_get_field(node, field);
   38673             :         case TAG_MPEG4_SpotLight:
   38674         220 :                 return SpotLight_get_field(node, field);
   38675             :         case TAG_MPEG4_Switch:
   38676        2083 :                 return Switch_get_field(node, field);
   38677             :         case TAG_MPEG4_TermCap:
   38678           0 :                 return TermCap_get_field(node, field);
   38679             :         case TAG_MPEG4_Text:
   38680       69202 :                 return Text_get_field(node, field);
   38681             :         case TAG_MPEG4_TextureCoordinate:
   38682           0 :                 return TextureCoordinate_get_field(node, field);
   38683             :         case TAG_MPEG4_TextureTransform:
   38684        1194 :                 return TextureTransform_get_field(node, field);
   38685             :         case TAG_MPEG4_TimeSensor:
   38686       16701 :                 return TimeSensor_get_field(node, field);
   38687             :         case TAG_MPEG4_TouchSensor:
   38688       26450 :                 return TouchSensor_get_field(node, field);
   38689             :         case TAG_MPEG4_Transform:
   38690       20076 :                 return Transform_get_field(node, field);
   38691             :         case TAG_MPEG4_Transform2D:
   38692      236651 :                 return Transform2D_get_field(node, field);
   38693             :         case TAG_MPEG4_Valuator:
   38694      169591 :                 return Valuator_get_field(node, field);
   38695             :         case TAG_MPEG4_Viewpoint:
   38696        4443 :                 return Viewpoint_get_field(node, field);
   38697             :         case TAG_MPEG4_VisibilitySensor:
   38698         108 :                 return VisibilitySensor_get_field(node, field);
   38699             :         case TAG_MPEG4_Viseme:
   38700           0 :                 return Viseme_get_field(node, field);
   38701             :         case TAG_MPEG4_WorldInfo:
   38702       19642 :                 return WorldInfo_get_field(node, field);
   38703             :         case TAG_MPEG4_AcousticMaterial:
   38704           0 :                 return AcousticMaterial_get_field(node, field);
   38705             :         case TAG_MPEG4_AcousticScene:
   38706           0 :                 return AcousticScene_get_field(node, field);
   38707             :         case TAG_MPEG4_ApplicationWindow:
   38708           0 :                 return ApplicationWindow_get_field(node, field);
   38709             :         case TAG_MPEG4_BAP:
   38710           0 :                 return BAP_get_field(node, field);
   38711             :         case TAG_MPEG4_BDP:
   38712           0 :                 return BDP_get_field(node, field);
   38713             :         case TAG_MPEG4_Body:
   38714           0 :                 return Body_get_field(node, field);
   38715             :         case TAG_MPEG4_BodyDefTable:
   38716           0 :                 return BodyDefTable_get_field(node, field);
   38717             :         case TAG_MPEG4_BodySegmentConnectionHint:
   38718           0 :                 return BodySegmentConnectionHint_get_field(node, field);
   38719             :         case TAG_MPEG4_DirectiveSound:
   38720           0 :                 return DirectiveSound_get_field(node, field);
   38721             :         case TAG_MPEG4_Hierarchical3DMesh:
   38722           0 :                 return Hierarchical3DMesh_get_field(node, field);
   38723             :         case TAG_MPEG4_MaterialKey:
   38724         157 :                 return MaterialKey_get_field(node, field);
   38725             :         case TAG_MPEG4_PerceptualParameters:
   38726           0 :                 return PerceptualParameters_get_field(node, field);
   38727             :         case TAG_MPEG4_TemporalTransform:
   38728           0 :                 return TemporalTransform_get_field(node, field);
   38729             :         case TAG_MPEG4_TemporalGroup:
   38730           0 :                 return TemporalGroup_get_field(node, field);
   38731             :         case TAG_MPEG4_ServerCommand:
   38732           0 :                 return ServerCommand_get_field(node, field);
   38733             :         case TAG_MPEG4_InputSensor:
   38734         255 :                 return InputSensor_get_field(node, field);
   38735             :         case TAG_MPEG4_MatteTexture:
   38736           0 :                 return MatteTexture_get_field(node, field);
   38737             :         case TAG_MPEG4_MediaBuffer:
   38738           0 :                 return MediaBuffer_get_field(node, field);
   38739             :         case TAG_MPEG4_MediaControl:
   38740        3077 :                 return MediaControl_get_field(node, field);
   38741             :         case TAG_MPEG4_MediaSensor:
   38742        1127 :                 return MediaSensor_get_field(node, field);
   38743             :         case TAG_MPEG4_BitWrapper:
   38744           0 :                 return BitWrapper_get_field(node, field);
   38745             :         case TAG_MPEG4_CoordinateInterpolator4D:
   38746           0 :                 return CoordinateInterpolator4D_get_field(node, field);
   38747             :         case TAG_MPEG4_DepthImage:
   38748           0 :                 return DepthImage_get_field(node, field);
   38749             :         case TAG_MPEG4_FFD:
   38750           0 :                 return FFD_get_field(node, field);
   38751             :         case TAG_MPEG4_Implicit:
   38752           0 :                 return Implicit_get_field(node, field);
   38753             :         case TAG_MPEG4_XXLFM_Appearance:
   38754           0 :                 return XXLFM_Appearance_get_field(node, field);
   38755             :         case TAG_MPEG4_XXLFM_BlendList:
   38756           0 :                 return XXLFM_BlendList_get_field(node, field);
   38757             :         case TAG_MPEG4_XXLFM_FrameList:
   38758           0 :                 return XXLFM_FrameList_get_field(node, field);
   38759             :         case TAG_MPEG4_XXLFM_LightMap:
   38760           0 :                 return XXLFM_LightMap_get_field(node, field);
   38761             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   38762           0 :                 return XXLFM_SurfaceMapList_get_field(node, field);
   38763             :         case TAG_MPEG4_XXLFM_ViewMapList:
   38764           0 :                 return XXLFM_ViewMapList_get_field(node, field);
   38765             :         case TAG_MPEG4_MeshGrid:
   38766           0 :                 return MeshGrid_get_field(node, field);
   38767             :         case TAG_MPEG4_NonLinearDeformer:
   38768         178 :                 return NonLinearDeformer_get_field(node, field);
   38769             :         case TAG_MPEG4_NurbsCurve:
   38770           0 :                 return NurbsCurve_get_field(node, field);
   38771             :         case TAG_MPEG4_NurbsCurve2D:
   38772           0 :                 return NurbsCurve2D_get_field(node, field);
   38773             :         case TAG_MPEG4_NurbsSurface:
   38774           0 :                 return NurbsSurface_get_field(node, field);
   38775             :         case TAG_MPEG4_OctreeImage:
   38776           0 :                 return OctreeImage_get_field(node, field);
   38777             :         case TAG_MPEG4_XXParticles:
   38778           0 :                 return XXParticles_get_field(node, field);
   38779             :         case TAG_MPEG4_XXParticleInitBox:
   38780           0 :                 return XXParticleInitBox_get_field(node, field);
   38781             :         case TAG_MPEG4_XXPlanarObstacle:
   38782           0 :                 return XXPlanarObstacle_get_field(node, field);
   38783             :         case TAG_MPEG4_XXPointAttractor:
   38784           0 :                 return XXPointAttractor_get_field(node, field);
   38785             :         case TAG_MPEG4_PointTexture:
   38786           0 :                 return PointTexture_get_field(node, field);
   38787             :         case TAG_MPEG4_PositionAnimator:
   38788         281 :                 return PositionAnimator_get_field(node, field);
   38789             :         case TAG_MPEG4_PositionAnimator2D:
   38790         281 :                 return PositionAnimator2D_get_field(node, field);
   38791             :         case TAG_MPEG4_PositionInterpolator4D:
   38792           0 :                 return PositionInterpolator4D_get_field(node, field);
   38793             :         case TAG_MPEG4_ProceduralTexture:
   38794           0 :                 return ProceduralTexture_get_field(node, field);
   38795             :         case TAG_MPEG4_Quadric:
   38796           0 :                 return Quadric_get_field(node, field);
   38797             :         case TAG_MPEG4_SBBone:
   38798           0 :                 return SBBone_get_field(node, field);
   38799             :         case TAG_MPEG4_SBMuscle:
   38800           0 :                 return SBMuscle_get_field(node, field);
   38801             :         case TAG_MPEG4_SBSegment:
   38802           0 :                 return SBSegment_get_field(node, field);
   38803             :         case TAG_MPEG4_SBSite:
   38804           0 :                 return SBSite_get_field(node, field);
   38805             :         case TAG_MPEG4_SBSkinnedModel:
   38806           0 :                 return SBSkinnedModel_get_field(node, field);
   38807             :         case TAG_MPEG4_SBVCAnimation:
   38808           0 :                 return SBVCAnimation_get_field(node, field);
   38809             :         case TAG_MPEG4_ScalarAnimator:
   38810         241 :                 return ScalarAnimator_get_field(node, field);
   38811             :         case TAG_MPEG4_SimpleTexture:
   38812           0 :                 return SimpleTexture_get_field(node, field);
   38813             :         case TAG_MPEG4_SolidRep:
   38814           0 :                 return SolidRep_get_field(node, field);
   38815             :         case TAG_MPEG4_SubdivisionSurface:
   38816           0 :                 return SubdivisionSurface_get_field(node, field);
   38817             :         case TAG_MPEG4_SubdivSurfaceSector:
   38818           0 :                 return SubdivSurfaceSector_get_field(node, field);
   38819             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   38820           0 :                 return WaveletSubdivisionSurface_get_field(node, field);
   38821             :         case TAG_MPEG4_Clipper2D:
   38822         364 :                 return Clipper2D_get_field(node, field);
   38823             :         case TAG_MPEG4_ColorTransform:
   38824        2518 :                 return ColorTransform_get_field(node, field);
   38825             :         case TAG_MPEG4_Ellipse:
   38826          66 :                 return Ellipse_get_field(node, field);
   38827             :         case TAG_MPEG4_LinearGradient:
   38828        1175 :                 return LinearGradient_get_field(node, field);
   38829             :         case TAG_MPEG4_PathLayout:
   38830         536 :                 return PathLayout_get_field(node, field);
   38831             :         case TAG_MPEG4_RadialGradient:
   38832        1706 :                 return RadialGradient_get_field(node, field);
   38833             :         case TAG_MPEG4_SynthesizedTexture:
   38834           0 :                 return SynthesizedTexture_get_field(node, field);
   38835             :         case TAG_MPEG4_TransformMatrix2D:
   38836       18576 :                 return TransformMatrix2D_get_field(node, field);
   38837             :         case TAG_MPEG4_Viewport:
   38838        3179 :                 return Viewport_get_field(node, field);
   38839             :         case TAG_MPEG4_XCurve2D:
   38840         411 :                 return XCurve2D_get_field(node, field);
   38841             :         case TAG_MPEG4_XFontStyle:
   38842           0 :                 return XFontStyle_get_field(node, field);
   38843             :         case TAG_MPEG4_XLineProperties:
   38844        7171 :                 return XLineProperties_get_field(node, field);
   38845             :         case TAG_MPEG4_AdvancedAudioBuffer:
   38846           0 :                 return AdvancedAudioBuffer_get_field(node, field);
   38847             :         case TAG_MPEG4_AudioChannelConfig:
   38848           0 :                 return AudioChannelConfig_get_field(node, field);
   38849             :         case TAG_MPEG4_DepthImageV2:
   38850           0 :                 return DepthImageV2_get_field(node, field);
   38851             :         case TAG_MPEG4_MorphShape:
   38852           0 :                 return MorphShape_get_field(node, field);
   38853             :         case TAG_MPEG4_MultiTexture:
   38854           0 :                 return MultiTexture_get_field(node, field);
   38855             :         case TAG_MPEG4_PointTextureV2:
   38856           0 :                 return PointTextureV2_get_field(node, field);
   38857             :         case TAG_MPEG4_SBVCAnimationV2:
   38858           0 :                 return SBVCAnimationV2_get_field(node, field);
   38859             :         case TAG_MPEG4_SimpleTextureV2:
   38860           0 :                 return SimpleTextureV2_get_field(node, field);
   38861             :         case TAG_MPEG4_SurroundingSound:
   38862           0 :                 return SurroundingSound_get_field(node, field);
   38863             :         case TAG_MPEG4_Transform3DAudio:
   38864           0 :                 return Transform3DAudio_get_field(node, field);
   38865             :         case TAG_MPEG4_WideSound:
   38866           0 :                 return WideSound_get_field(node, field);
   38867             :         case TAG_MPEG4_ScoreShape:
   38868           0 :                 return ScoreShape_get_field(node, field);
   38869             :         case TAG_MPEG4_MusicScore:
   38870           0 :                 return MusicScore_get_field(node, field);
   38871             :         case TAG_MPEG4_FootPrintSetNode:
   38872           0 :                 return FootPrintSetNode_get_field(node, field);
   38873             :         case TAG_MPEG4_FootPrintNode:
   38874           0 :                 return FootPrintNode_get_field(node, field);
   38875             :         case TAG_MPEG4_BuildingPartNode:
   38876           0 :                 return BuildingPartNode_get_field(node, field);
   38877             :         case TAG_MPEG4_RoofNode:
   38878           0 :                 return RoofNode_get_field(node, field);
   38879             :         case TAG_MPEG4_FacadeNode:
   38880           0 :                 return FacadeNode_get_field(node, field);
   38881             :         case TAG_MPEG4_Shadow:
   38882           0 :                 return Shadow_get_field(node, field);
   38883             :         case TAG_MPEG4_CacheTexture:
   38884         374 :                 return CacheTexture_get_field(node, field);
   38885             :         case TAG_MPEG4_EnvironmentTest:
   38886         390 :                 return EnvironmentTest_get_field(node, field);
   38887             :         case TAG_MPEG4_KeyNavigator:
   38888         708 :                 return KeyNavigator_get_field(node, field);
   38889             :         case TAG_MPEG4_SpacePartition:
   38890           0 :                 return SpacePartition_get_field(node, field);
   38891             :         case TAG_MPEG4_Storage:
   38892         127 :                 return Storage_get_field(node, field);
   38893             :         default:
   38894           0 :                 return GF_BAD_PARAM;
   38895             :         }
   38896     1181793 : }
   38897             : 
   38898             : GF_Err gf_sg_mpeg4_node_get_field_index(GF_Node *node, u32 inField, u8 code_mode, u32 *fieldIndex)
   38899             : {
   38900      402066 :         switch (node->sgprivate->tag) {
   38901             :         case TAG_MPEG4_Anchor:
   38902          94 :                 return Anchor_get_field_index(node, inField, code_mode, fieldIndex);
   38903             :         case TAG_MPEG4_AnimationStream:
   38904         203 :                 return AnimationStream_get_field_index(node, inField, code_mode, fieldIndex);
   38905             :         case TAG_MPEG4_Appearance:
   38906        9746 :                 return Appearance_get_field_index(node, inField, code_mode, fieldIndex);
   38907             :         case TAG_MPEG4_AudioBuffer:
   38908          87 :                 return AudioBuffer_get_field_index(node, inField, code_mode, fieldIndex);
   38909             :         case TAG_MPEG4_AudioClip:
   38910         172 :                 return AudioClip_get_field_index(node, inField, code_mode, fieldIndex);
   38911             :         case TAG_MPEG4_AudioDelay:
   38912           0 :                 return AudioDelay_get_field_index(node, inField, code_mode, fieldIndex);
   38913             :         case TAG_MPEG4_AudioFX:
   38914           0 :                 return AudioFX_get_field_index(node, inField, code_mode, fieldIndex);
   38915             :         case TAG_MPEG4_AudioMix:
   38916           0 :                 return AudioMix_get_field_index(node, inField, code_mode, fieldIndex);
   38917             :         case TAG_MPEG4_AudioSource:
   38918         268 :                 return AudioSource_get_field_index(node, inField, code_mode, fieldIndex);
   38919             :         case TAG_MPEG4_AudioSwitch:
   38920           0 :                 return AudioSwitch_get_field_index(node, inField, code_mode, fieldIndex);
   38921             :         case TAG_MPEG4_Background:
   38922         142 :                 return Background_get_field_index(node, inField, code_mode, fieldIndex);
   38923             :         case TAG_MPEG4_Background2D:
   38924        2756 :                 return Background2D_get_field_index(node, inField, code_mode, fieldIndex);
   38925             :         case TAG_MPEG4_Billboard:
   38926          37 :                 return Billboard_get_field_index(node, inField, code_mode, fieldIndex);
   38927             :         case TAG_MPEG4_Bitmap:
   38928         112 :                 return Bitmap_get_field_index(node, inField, code_mode, fieldIndex);
   38929             :         case TAG_MPEG4_Box:
   38930         266 :                 return Box_get_field_index(node, inField, code_mode, fieldIndex);
   38931             :         case TAG_MPEG4_Circle:
   38932         726 :                 return Circle_get_field_index(node, inField, code_mode, fieldIndex);
   38933             :         case TAG_MPEG4_Collision:
   38934          49 :                 return Collision_get_field_index(node, inField, code_mode, fieldIndex);
   38935             :         case TAG_MPEG4_Color:
   38936          56 :                 return Color_get_field_index(node, inField, code_mode, fieldIndex);
   38937             :         case TAG_MPEG4_ColorInterpolator:
   38938         192 :                 return ColorInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   38939             :         case TAG_MPEG4_CompositeTexture2D:
   38940         113 :                 return CompositeTexture2D_get_field_index(node, inField, code_mode, fieldIndex);
   38941             :         case TAG_MPEG4_CompositeTexture3D:
   38942          66 :                 return CompositeTexture3D_get_field_index(node, inField, code_mode, fieldIndex);
   38943             :         case TAG_MPEG4_Conditional:
   38944        6603 :                 return Conditional_get_field_index(node, inField, code_mode, fieldIndex);
   38945             :         case TAG_MPEG4_Cone:
   38946         123 :                 return Cone_get_field_index(node, inField, code_mode, fieldIndex);
   38947             :         case TAG_MPEG4_Coordinate:
   38948          28 :                 return Coordinate_get_field_index(node, inField, code_mode, fieldIndex);
   38949             :         case TAG_MPEG4_Coordinate2D:
   38950        1300 :                 return Coordinate2D_get_field_index(node, inField, code_mode, fieldIndex);
   38951             :         case TAG_MPEG4_CoordinateInterpolator:
   38952           0 :                 return CoordinateInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   38953             :         case TAG_MPEG4_CoordinateInterpolator2D:
   38954          64 :                 return CoordinateInterpolator2D_get_field_index(node, inField, code_mode, fieldIndex);
   38955             :         case TAG_MPEG4_Curve2D:
   38956        1475 :                 return Curve2D_get_field_index(node, inField, code_mode, fieldIndex);
   38957             :         case TAG_MPEG4_Cylinder:
   38958         375 :                 return Cylinder_get_field_index(node, inField, code_mode, fieldIndex);
   38959             :         case TAG_MPEG4_CylinderSensor:
   38960          94 :                 return CylinderSensor_get_field_index(node, inField, code_mode, fieldIndex);
   38961             :         case TAG_MPEG4_DirectionalLight:
   38962          91 :                 return DirectionalLight_get_field_index(node, inField, code_mode, fieldIndex);
   38963             :         case TAG_MPEG4_DiscSensor:
   38964          92 :                 return DiscSensor_get_field_index(node, inField, code_mode, fieldIndex);
   38965             :         case TAG_MPEG4_ElevationGrid:
   38966          56 :                 return ElevationGrid_get_field_index(node, inField, code_mode, fieldIndex);
   38967             :         case TAG_MPEG4_Expression:
   38968           0 :                 return Expression_get_field_index(node, inField, code_mode, fieldIndex);
   38969             :         case TAG_MPEG4_Extrusion:
   38970          50 :                 return Extrusion_get_field_index(node, inField, code_mode, fieldIndex);
   38971             :         case TAG_MPEG4_Face:
   38972           0 :                 return Face_get_field_index(node, inField, code_mode, fieldIndex);
   38973             :         case TAG_MPEG4_FaceDefMesh:
   38974           0 :                 return FaceDefMesh_get_field_index(node, inField, code_mode, fieldIndex);
   38975             :         case TAG_MPEG4_FaceDefTables:
   38976           0 :                 return FaceDefTables_get_field_index(node, inField, code_mode, fieldIndex);
   38977             :         case TAG_MPEG4_FaceDefTransform:
   38978           0 :                 return FaceDefTransform_get_field_index(node, inField, code_mode, fieldIndex);
   38979             :         case TAG_MPEG4_FAP:
   38980           0 :                 return FAP_get_field_index(node, inField, code_mode, fieldIndex);
   38981             :         case TAG_MPEG4_FDP:
   38982           0 :                 return FDP_get_field_index(node, inField, code_mode, fieldIndex);
   38983             :         case TAG_MPEG4_FIT:
   38984           0 :                 return FIT_get_field_index(node, inField, code_mode, fieldIndex);
   38985             :         case TAG_MPEG4_Fog:
   38986          40 :                 return Fog_get_field_index(node, inField, code_mode, fieldIndex);
   38987             :         case TAG_MPEG4_FontStyle:
   38988        8880 :                 return FontStyle_get_field_index(node, inField, code_mode, fieldIndex);
   38989             :         case TAG_MPEG4_Form:
   38990         525 :                 return Form_get_field_index(node, inField, code_mode, fieldIndex);
   38991             :         case TAG_MPEG4_Group:
   38992         546 :                 return Group_get_field_index(node, inField, code_mode, fieldIndex);
   38993             :         case TAG_MPEG4_ImageTexture:
   38994         599 :                 return ImageTexture_get_field_index(node, inField, code_mode, fieldIndex);
   38995             :         case TAG_MPEG4_IndexedFaceSet:
   38996         144 :                 return IndexedFaceSet_get_field_index(node, inField, code_mode, fieldIndex);
   38997             :         case TAG_MPEG4_IndexedFaceSet2D:
   38998        1855 :                 return IndexedFaceSet2D_get_field_index(node, inField, code_mode, fieldIndex);
   38999             :         case TAG_MPEG4_IndexedLineSet:
   39000          65 :                 return IndexedLineSet_get_field_index(node, inField, code_mode, fieldIndex);
   39001             :         case TAG_MPEG4_IndexedLineSet2D:
   39002         520 :                 return IndexedLineSet2D_get_field_index(node, inField, code_mode, fieldIndex);
   39003             :         case TAG_MPEG4_Inline:
   39004          84 :                 return Inline_get_field_index(node, inField, code_mode, fieldIndex);
   39005             :         case TAG_MPEG4_LOD:
   39006          16 :                 return LOD_get_field_index(node, inField, code_mode, fieldIndex);
   39007             :         case TAG_MPEG4_Layer2D:
   39008         461 :                 return Layer2D_get_field_index(node, inField, code_mode, fieldIndex);
   39009             :         case TAG_MPEG4_Layer3D:
   39010         155 :                 return Layer3D_get_field_index(node, inField, code_mode, fieldIndex);
   39011             :         case TAG_MPEG4_Layout:
   39012        8419 :                 return Layout_get_field_index(node, inField, code_mode, fieldIndex);
   39013             :         case TAG_MPEG4_LineProperties:
   39014         844 :                 return LineProperties_get_field_index(node, inField, code_mode, fieldIndex);
   39015             :         case TAG_MPEG4_ListeningPoint:
   39016           0 :                 return ListeningPoint_get_field_index(node, inField, code_mode, fieldIndex);
   39017             :         case TAG_MPEG4_Material:
   39018        1435 :                 return Material_get_field_index(node, inField, code_mode, fieldIndex);
   39019             :         case TAG_MPEG4_Material2D:
   39020       12442 :                 return Material2D_get_field_index(node, inField, code_mode, fieldIndex);
   39021             :         case TAG_MPEG4_MovieTexture:
   39022         818 :                 return MovieTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39023             :         case TAG_MPEG4_NavigationInfo:
   39024         230 :                 return NavigationInfo_get_field_index(node, inField, code_mode, fieldIndex);
   39025             :         case TAG_MPEG4_Normal:
   39026           0 :                 return Normal_get_field_index(node, inField, code_mode, fieldIndex);
   39027             :         case TAG_MPEG4_NormalInterpolator:
   39028           0 :                 return NormalInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   39029             :         case TAG_MPEG4_OrderedGroup:
   39030        2486 :                 return OrderedGroup_get_field_index(node, inField, code_mode, fieldIndex);
   39031             :         case TAG_MPEG4_OrientationInterpolator:
   39032         523 :                 return OrientationInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   39033             :         case TAG_MPEG4_PixelTexture:
   39034          44 :                 return PixelTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39035             :         case TAG_MPEG4_PlaneSensor:
   39036          99 :                 return PlaneSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39037             :         case TAG_MPEG4_PlaneSensor2D:
   39038         666 :                 return PlaneSensor2D_get_field_index(node, inField, code_mode, fieldIndex);
   39039             :         case TAG_MPEG4_PointLight:
   39040          38 :                 return PointLight_get_field_index(node, inField, code_mode, fieldIndex);
   39041             :         case TAG_MPEG4_PointSet:
   39042           9 :                 return PointSet_get_field_index(node, inField, code_mode, fieldIndex);
   39043             :         case TAG_MPEG4_PointSet2D:
   39044          47 :                 return PointSet2D_get_field_index(node, inField, code_mode, fieldIndex);
   39045             :         case TAG_MPEG4_PositionInterpolator:
   39046         352 :                 return PositionInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   39047             :         case TAG_MPEG4_PositionInterpolator2D:
   39048        1049 :                 return PositionInterpolator2D_get_field_index(node, inField, code_mode, fieldIndex);
   39049             :         case TAG_MPEG4_ProximitySensor2D:
   39050          74 :                 return ProximitySensor2D_get_field_index(node, inField, code_mode, fieldIndex);
   39051             :         case TAG_MPEG4_ProximitySensor:
   39052          51 :                 return ProximitySensor_get_field_index(node, inField, code_mode, fieldIndex);
   39053             :         case TAG_MPEG4_QuantizationParameter:
   39054         730 :                 return QuantizationParameter_get_field_index(node, inField, code_mode, fieldIndex);
   39055             :         case TAG_MPEG4_Rectangle:
   39056        1696 :                 return Rectangle_get_field_index(node, inField, code_mode, fieldIndex);
   39057             :         case TAG_MPEG4_ScalarInterpolator:
   39058        1415 :                 return ScalarInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   39059             :         case TAG_MPEG4_Script:
   39060        1029 :                 return Script_get_field_index(node, inField, code_mode, fieldIndex);
   39061             :         case TAG_MPEG4_Shape:
   39062       19604 :                 return Shape_get_field_index(node, inField, code_mode, fieldIndex);
   39063             :         case TAG_MPEG4_Sound:
   39064          65 :                 return Sound_get_field_index(node, inField, code_mode, fieldIndex);
   39065             :         case TAG_MPEG4_Sound2D:
   39066         121 :                 return Sound2D_get_field_index(node, inField, code_mode, fieldIndex);
   39067             :         case TAG_MPEG4_Sphere:
   39068          72 :                 return Sphere_get_field_index(node, inField, code_mode, fieldIndex);
   39069             :         case TAG_MPEG4_SphereSensor:
   39070          64 :                 return SphereSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39071             :         case TAG_MPEG4_SpotLight:
   39072          47 :                 return SpotLight_get_field_index(node, inField, code_mode, fieldIndex);
   39073             :         case TAG_MPEG4_Switch:
   39074         716 :                 return Switch_get_field_index(node, inField, code_mode, fieldIndex);
   39075             :         case TAG_MPEG4_TermCap:
   39076           0 :                 return TermCap_get_field_index(node, inField, code_mode, fieldIndex);
   39077             :         case TAG_MPEG4_Text:
   39078       12639 :                 return Text_get_field_index(node, inField, code_mode, fieldIndex);
   39079             :         case TAG_MPEG4_TextureCoordinate:
   39080           0 :                 return TextureCoordinate_get_field_index(node, inField, code_mode, fieldIndex);
   39081             :         case TAG_MPEG4_TextureTransform:
   39082         234 :                 return TextureTransform_get_field_index(node, inField, code_mode, fieldIndex);
   39083             :         case TAG_MPEG4_TimeSensor:
   39084        4863 :                 return TimeSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39085             :         case TAG_MPEG4_TouchSensor:
   39086        8835 :                 return TouchSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39087             :         case TAG_MPEG4_Transform:
   39088        3246 :                 return Transform_get_field_index(node, inField, code_mode, fieldIndex);
   39089             :         case TAG_MPEG4_Transform2D:
   39090       35335 :                 return Transform2D_get_field_index(node, inField, code_mode, fieldIndex);
   39091             :         case TAG_MPEG4_Valuator:
   39092       24731 :                 return Valuator_get_field_index(node, inField, code_mode, fieldIndex);
   39093             :         case TAG_MPEG4_Viewpoint:
   39094         615 :                 return Viewpoint_get_field_index(node, inField, code_mode, fieldIndex);
   39095             :         case TAG_MPEG4_VisibilitySensor:
   39096          39 :                 return VisibilitySensor_get_field_index(node, inField, code_mode, fieldIndex);
   39097             :         case TAG_MPEG4_Viseme:
   39098           0 :                 return Viseme_get_field_index(node, inField, code_mode, fieldIndex);
   39099             :         case TAG_MPEG4_WorldInfo:
   39100        4098 :                 return WorldInfo_get_field_index(node, inField, code_mode, fieldIndex);
   39101             :         case TAG_MPEG4_AcousticMaterial:
   39102           0 :                 return AcousticMaterial_get_field_index(node, inField, code_mode, fieldIndex);
   39103             :         case TAG_MPEG4_AcousticScene:
   39104           0 :                 return AcousticScene_get_field_index(node, inField, code_mode, fieldIndex);
   39105             :         case TAG_MPEG4_ApplicationWindow:
   39106           0 :                 return ApplicationWindow_get_field_index(node, inField, code_mode, fieldIndex);
   39107             :         case TAG_MPEG4_BAP:
   39108           0 :                 return BAP_get_field_index(node, inField, code_mode, fieldIndex);
   39109             :         case TAG_MPEG4_BDP:
   39110           0 :                 return BDP_get_field_index(node, inField, code_mode, fieldIndex);
   39111             :         case TAG_MPEG4_Body:
   39112           0 :                 return Body_get_field_index(node, inField, code_mode, fieldIndex);
   39113             :         case TAG_MPEG4_BodyDefTable:
   39114           0 :                 return BodyDefTable_get_field_index(node, inField, code_mode, fieldIndex);
   39115             :         case TAG_MPEG4_BodySegmentConnectionHint:
   39116           0 :                 return BodySegmentConnectionHint_get_field_index(node, inField, code_mode, fieldIndex);
   39117             :         case TAG_MPEG4_DirectiveSound:
   39118           0 :                 return DirectiveSound_get_field_index(node, inField, code_mode, fieldIndex);
   39119             :         case TAG_MPEG4_Hierarchical3DMesh:
   39120           0 :                 return Hierarchical3DMesh_get_field_index(node, inField, code_mode, fieldIndex);
   39121             :         case TAG_MPEG4_MaterialKey:
   39122          27 :                 return MaterialKey_get_field_index(node, inField, code_mode, fieldIndex);
   39123             :         case TAG_MPEG4_PerceptualParameters:
   39124           0 :                 return PerceptualParameters_get_field_index(node, inField, code_mode, fieldIndex);
   39125             :         case TAG_MPEG4_TemporalTransform:
   39126           0 :                 return TemporalTransform_get_field_index(node, inField, code_mode, fieldIndex);
   39127             :         case TAG_MPEG4_TemporalGroup:
   39128           0 :                 return TemporalGroup_get_field_index(node, inField, code_mode, fieldIndex);
   39129             :         case TAG_MPEG4_ServerCommand:
   39130           0 :                 return ServerCommand_get_field_index(node, inField, code_mode, fieldIndex);
   39131             :         case TAG_MPEG4_InputSensor:
   39132          48 :                 return InputSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39133             :         case TAG_MPEG4_MatteTexture:
   39134           0 :                 return MatteTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39135             :         case TAG_MPEG4_MediaBuffer:
   39136           0 :                 return MediaBuffer_get_field_index(node, inField, code_mode, fieldIndex);
   39137             :         case TAG_MPEG4_MediaControl:
   39138         601 :                 return MediaControl_get_field_index(node, inField, code_mode, fieldIndex);
   39139             :         case TAG_MPEG4_MediaSensor:
   39140         414 :                 return MediaSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39141             :         case TAG_MPEG4_BitWrapper:
   39142           0 :                 return BitWrapper_get_field_index(node, inField, code_mode, fieldIndex);
   39143             :         case TAG_MPEG4_CoordinateInterpolator4D:
   39144           0 :                 return CoordinateInterpolator4D_get_field_index(node, inField, code_mode, fieldIndex);
   39145             :         case TAG_MPEG4_DepthImage:
   39146           0 :                 return DepthImage_get_field_index(node, inField, code_mode, fieldIndex);
   39147             :         case TAG_MPEG4_FFD:
   39148           0 :                 return FFD_get_field_index(node, inField, code_mode, fieldIndex);
   39149             :         case TAG_MPEG4_Implicit:
   39150           0 :                 return Implicit_get_field_index(node, inField, code_mode, fieldIndex);
   39151             :         case TAG_MPEG4_XXLFM_Appearance:
   39152           0 :                 return XXLFM_Appearance_get_field_index(node, inField, code_mode, fieldIndex);
   39153             :         case TAG_MPEG4_XXLFM_BlendList:
   39154           0 :                 return XXLFM_BlendList_get_field_index(node, inField, code_mode, fieldIndex);
   39155             :         case TAG_MPEG4_XXLFM_FrameList:
   39156           0 :                 return XXLFM_FrameList_get_field_index(node, inField, code_mode, fieldIndex);
   39157             :         case TAG_MPEG4_XXLFM_LightMap:
   39158           0 :                 return XXLFM_LightMap_get_field_index(node, inField, code_mode, fieldIndex);
   39159             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   39160           0 :                 return XXLFM_SurfaceMapList_get_field_index(node, inField, code_mode, fieldIndex);
   39161             :         case TAG_MPEG4_XXLFM_ViewMapList:
   39162           0 :                 return XXLFM_ViewMapList_get_field_index(node, inField, code_mode, fieldIndex);
   39163             :         case TAG_MPEG4_MeshGrid:
   39164           0 :                 return MeshGrid_get_field_index(node, inField, code_mode, fieldIndex);
   39165             :         case TAG_MPEG4_NonLinearDeformer:
   39166          43 :                 return NonLinearDeformer_get_field_index(node, inField, code_mode, fieldIndex);
   39167             :         case TAG_MPEG4_NurbsCurve:
   39168           0 :                 return NurbsCurve_get_field_index(node, inField, code_mode, fieldIndex);
   39169             :         case TAG_MPEG4_NurbsCurve2D:
   39170           0 :                 return NurbsCurve2D_get_field_index(node, inField, code_mode, fieldIndex);
   39171             :         case TAG_MPEG4_NurbsSurface:
   39172           0 :                 return NurbsSurface_get_field_index(node, inField, code_mode, fieldIndex);
   39173             :         case TAG_MPEG4_OctreeImage:
   39174           0 :                 return OctreeImage_get_field_index(node, inField, code_mode, fieldIndex);
   39175             :         case TAG_MPEG4_XXParticles:
   39176           0 :                 return XXParticles_get_field_index(node, inField, code_mode, fieldIndex);
   39177             :         case TAG_MPEG4_XXParticleInitBox:
   39178           0 :                 return XXParticleInitBox_get_field_index(node, inField, code_mode, fieldIndex);
   39179             :         case TAG_MPEG4_XXPlanarObstacle:
   39180           0 :                 return XXPlanarObstacle_get_field_index(node, inField, code_mode, fieldIndex);
   39181             :         case TAG_MPEG4_XXPointAttractor:
   39182           0 :                 return XXPointAttractor_get_field_index(node, inField, code_mode, fieldIndex);
   39183             :         case TAG_MPEG4_PointTexture:
   39184           0 :                 return PointTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39185             :         case TAG_MPEG4_PositionAnimator:
   39186          79 :                 return PositionAnimator_get_field_index(node, inField, code_mode, fieldIndex);
   39187             :         case TAG_MPEG4_PositionAnimator2D:
   39188          79 :                 return PositionAnimator2D_get_field_index(node, inField, code_mode, fieldIndex);
   39189             :         case TAG_MPEG4_PositionInterpolator4D:
   39190           0 :                 return PositionInterpolator4D_get_field_index(node, inField, code_mode, fieldIndex);
   39191             :         case TAG_MPEG4_ProceduralTexture:
   39192           0 :                 return ProceduralTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39193             :         case TAG_MPEG4_Quadric:
   39194           0 :                 return Quadric_get_field_index(node, inField, code_mode, fieldIndex);
   39195             :         case TAG_MPEG4_SBBone:
   39196           0 :                 return SBBone_get_field_index(node, inField, code_mode, fieldIndex);
   39197             :         case TAG_MPEG4_SBMuscle:
   39198           0 :                 return SBMuscle_get_field_index(node, inField, code_mode, fieldIndex);
   39199             :         case TAG_MPEG4_SBSegment:
   39200           0 :                 return SBSegment_get_field_index(node, inField, code_mode, fieldIndex);
   39201             :         case TAG_MPEG4_SBSite:
   39202           0 :                 return SBSite_get_field_index(node, inField, code_mode, fieldIndex);
   39203             :         case TAG_MPEG4_SBSkinnedModel:
   39204           0 :                 return SBSkinnedModel_get_field_index(node, inField, code_mode, fieldIndex);
   39205             :         case TAG_MPEG4_SBVCAnimation:
   39206           0 :                 return SBVCAnimation_get_field_index(node, inField, code_mode, fieldIndex);
   39207             :         case TAG_MPEG4_ScalarAnimator:
   39208          68 :                 return ScalarAnimator_get_field_index(node, inField, code_mode, fieldIndex);
   39209             :         case TAG_MPEG4_SimpleTexture:
   39210           0 :                 return SimpleTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39211             :         case TAG_MPEG4_SolidRep:
   39212           0 :                 return SolidRep_get_field_index(node, inField, code_mode, fieldIndex);
   39213             :         case TAG_MPEG4_SubdivisionSurface:
   39214           0 :                 return SubdivisionSurface_get_field_index(node, inField, code_mode, fieldIndex);
   39215             :         case TAG_MPEG4_SubdivSurfaceSector:
   39216           0 :                 return SubdivSurfaceSector_get_field_index(node, inField, code_mode, fieldIndex);
   39217             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   39218           0 :                 return WaveletSubdivisionSurface_get_field_index(node, inField, code_mode, fieldIndex);
   39219             :         case TAG_MPEG4_Clipper2D:
   39220         158 :                 return Clipper2D_get_field_index(node, inField, code_mode, fieldIndex);
   39221             :         case TAG_MPEG4_ColorTransform:
   39222         494 :                 return ColorTransform_get_field_index(node, inField, code_mode, fieldIndex);
   39223             :         case TAG_MPEG4_Ellipse:
   39224          14 :                 return Ellipse_get_field_index(node, inField, code_mode, fieldIndex);
   39225             :         case TAG_MPEG4_LinearGradient:
   39226         291 :                 return LinearGradient_get_field_index(node, inField, code_mode, fieldIndex);
   39227             :         case TAG_MPEG4_PathLayout:
   39228         290 :                 return PathLayout_get_field_index(node, inField, code_mode, fieldIndex);
   39229             :         case TAG_MPEG4_RadialGradient:
   39230         436 :                 return RadialGradient_get_field_index(node, inField, code_mode, fieldIndex);
   39231             :         case TAG_MPEG4_SynthesizedTexture:
   39232           0 :                 return SynthesizedTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39233             :         case TAG_MPEG4_TransformMatrix2D:
   39234        6546 :                 return TransformMatrix2D_get_field_index(node, inField, code_mode, fieldIndex);
   39235             :         case TAG_MPEG4_Viewport:
   39236         523 :                 return Viewport_get_field_index(node, inField, code_mode, fieldIndex);
   39237             :         case TAG_MPEG4_XCurve2D:
   39238          86 :                 return XCurve2D_get_field_index(node, inField, code_mode, fieldIndex);
   39239             :         case TAG_MPEG4_XFontStyle:
   39240           0 :                 return XFontStyle_get_field_index(node, inField, code_mode, fieldIndex);
   39241             :         case TAG_MPEG4_XLineProperties:
   39242        1253 :                 return XLineProperties_get_field_index(node, inField, code_mode, fieldIndex);
   39243             :         case TAG_MPEG4_AdvancedAudioBuffer:
   39244           0 :                 return AdvancedAudioBuffer_get_field_index(node, inField, code_mode, fieldIndex);
   39245             :         case TAG_MPEG4_AudioChannelConfig:
   39246           0 :                 return AudioChannelConfig_get_field_index(node, inField, code_mode, fieldIndex);
   39247             :         case TAG_MPEG4_DepthImageV2:
   39248           0 :                 return DepthImageV2_get_field_index(node, inField, code_mode, fieldIndex);
   39249             :         case TAG_MPEG4_MorphShape:
   39250           0 :                 return MorphShape_get_field_index(node, inField, code_mode, fieldIndex);
   39251             :         case TAG_MPEG4_MultiTexture:
   39252           0 :                 return MultiTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39253             :         case TAG_MPEG4_PointTextureV2:
   39254           0 :                 return PointTextureV2_get_field_index(node, inField, code_mode, fieldIndex);
   39255             :         case TAG_MPEG4_SBVCAnimationV2:
   39256           0 :                 return SBVCAnimationV2_get_field_index(node, inField, code_mode, fieldIndex);
   39257             :         case TAG_MPEG4_SimpleTextureV2:
   39258           0 :                 return SimpleTextureV2_get_field_index(node, inField, code_mode, fieldIndex);
   39259             :         case TAG_MPEG4_SurroundingSound:
   39260           0 :                 return SurroundingSound_get_field_index(node, inField, code_mode, fieldIndex);
   39261             :         case TAG_MPEG4_Transform3DAudio:
   39262           0 :                 return Transform3DAudio_get_field_index(node, inField, code_mode, fieldIndex);
   39263             :         case TAG_MPEG4_WideSound:
   39264           0 :                 return WideSound_get_field_index(node, inField, code_mode, fieldIndex);
   39265             :         case TAG_MPEG4_ScoreShape:
   39266           0 :                 return ScoreShape_get_field_index(node, inField, code_mode, fieldIndex);
   39267             :         case TAG_MPEG4_MusicScore:
   39268           0 :                 return MusicScore_get_field_index(node, inField, code_mode, fieldIndex);
   39269             :         case TAG_MPEG4_FootPrintSetNode:
   39270           0 :                 return FootPrintSetNode_get_field_index(node, inField, code_mode, fieldIndex);
   39271             :         case TAG_MPEG4_FootPrintNode:
   39272           0 :                 return FootPrintNode_get_field_index(node, inField, code_mode, fieldIndex);
   39273             :         case TAG_MPEG4_BuildingPartNode:
   39274           0 :                 return BuildingPartNode_get_field_index(node, inField, code_mode, fieldIndex);
   39275             :         case TAG_MPEG4_RoofNode:
   39276           0 :                 return RoofNode_get_field_index(node, inField, code_mode, fieldIndex);
   39277             :         case TAG_MPEG4_FacadeNode:
   39278           0 :                 return FacadeNode_get_field_index(node, inField, code_mode, fieldIndex);
   39279             :         case TAG_MPEG4_Shadow:
   39280           0 :                 return Shadow_get_field_index(node, inField, code_mode, fieldIndex);
   39281             :         case TAG_MPEG4_CacheTexture:
   39282          62 :                 return CacheTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39283             :         case TAG_MPEG4_EnvironmentTest:
   39284          98 :                 return EnvironmentTest_get_field_index(node, inField, code_mode, fieldIndex);
   39285             :         case TAG_MPEG4_KeyNavigator:
   39286         254 :                 return KeyNavigator_get_field_index(node, inField, code_mode, fieldIndex);
   39287             :         case TAG_MPEG4_SpacePartition:
   39288           0 :                 return SpacePartition_get_field_index(node, inField, code_mode, fieldIndex);
   39289             :         case TAG_MPEG4_Storage:
   39290          23 :                 return Storage_get_field_index(node, inField, code_mode, fieldIndex);
   39291             :         default:
   39292           0 :                 return GF_BAD_PARAM;
   39293             :         }
   39294      201033 : }
   39295             : 
   39296             : Bool gf_sg_mpeg4_node_get_aq_info(GF_Node *node, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   39297             : {
   39298         630 :         switch (node->sgprivate->tag) {
   39299             :         case TAG_MPEG4_Anchor:
   39300           0 :                 return Anchor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39301             :         case TAG_MPEG4_AnimationStream:
   39302           0 :                 return AnimationStream_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39303             :         case TAG_MPEG4_Appearance:
   39304           0 :                 return Appearance_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39305             :         case TAG_MPEG4_AudioBuffer:
   39306           0 :                 return AudioBuffer_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39307             :         case TAG_MPEG4_AudioClip:
   39308           0 :                 return AudioClip_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39309             :         case TAG_MPEG4_AudioDelay:
   39310           0 :                 return AudioDelay_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39311             :         case TAG_MPEG4_AudioFX:
   39312           0 :                 return AudioFX_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39313             :         case TAG_MPEG4_AudioMix:
   39314           0 :                 return AudioMix_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39315             :         case TAG_MPEG4_AudioSource:
   39316           0 :                 return AudioSource_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39317             :         case TAG_MPEG4_AudioSwitch:
   39318           0 :                 return AudioSwitch_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39319             :         case TAG_MPEG4_Background:
   39320           0 :                 return Background_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39321             :         case TAG_MPEG4_Background2D:
   39322           0 :                 return Background2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39323             :         case TAG_MPEG4_Billboard:
   39324           0 :                 return Billboard_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39325             :         case TAG_MPEG4_Bitmap:
   39326           0 :                 return Bitmap_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39327             :         case TAG_MPEG4_Box:
   39328           0 :                 return Box_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39329             :         case TAG_MPEG4_Circle:
   39330           0 :                 return Circle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39331             :         case TAG_MPEG4_Collision:
   39332           0 :                 return Collision_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39333             :         case TAG_MPEG4_Color:
   39334           0 :                 return Color_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39335             :         case TAG_MPEG4_ColorInterpolator:
   39336           0 :                 return ColorInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39337             :         case TAG_MPEG4_CompositeTexture2D:
   39338           0 :                 return CompositeTexture2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39339             :         case TAG_MPEG4_CompositeTexture3D:
   39340           0 :                 return CompositeTexture3D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39341             :         case TAG_MPEG4_Conditional:
   39342           0 :                 return Conditional_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39343             :         case TAG_MPEG4_Cone:
   39344           0 :                 return Cone_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39345             :         case TAG_MPEG4_Coordinate:
   39346           0 :                 return Coordinate_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39347             :         case TAG_MPEG4_Coordinate2D:
   39348         294 :                 return Coordinate2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39349             :         case TAG_MPEG4_CoordinateInterpolator:
   39350           0 :                 return CoordinateInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39351             :         case TAG_MPEG4_CoordinateInterpolator2D:
   39352           0 :                 return CoordinateInterpolator2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39353             :         case TAG_MPEG4_Curve2D:
   39354           0 :                 return Curve2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39355             :         case TAG_MPEG4_Cylinder:
   39356           0 :                 return Cylinder_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39357             :         case TAG_MPEG4_CylinderSensor:
   39358           0 :                 return CylinderSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39359             :         case TAG_MPEG4_DirectionalLight:
   39360           0 :                 return DirectionalLight_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39361             :         case TAG_MPEG4_DiscSensor:
   39362           0 :                 return DiscSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39363             :         case TAG_MPEG4_ElevationGrid:
   39364           0 :                 return ElevationGrid_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39365             :         case TAG_MPEG4_Expression:
   39366           0 :                 return Expression_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39367             :         case TAG_MPEG4_Extrusion:
   39368           0 :                 return Extrusion_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39369             :         case TAG_MPEG4_Face:
   39370           0 :                 return Face_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39371             :         case TAG_MPEG4_FaceDefMesh:
   39372           0 :                 return FaceDefMesh_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39373             :         case TAG_MPEG4_FaceDefTables:
   39374           0 :                 return FaceDefTables_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39375             :         case TAG_MPEG4_FaceDefTransform:
   39376           0 :                 return FaceDefTransform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39377             :         case TAG_MPEG4_FAP:
   39378           0 :                 return FAP_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39379             :         case TAG_MPEG4_FDP:
   39380           0 :                 return FDP_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39381             :         case TAG_MPEG4_FIT:
   39382           0 :                 return FIT_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39383             :         case TAG_MPEG4_Fog:
   39384           0 :                 return Fog_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39385             :         case TAG_MPEG4_FontStyle:
   39386           0 :                 return FontStyle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39387             :         case TAG_MPEG4_Form:
   39388           0 :                 return Form_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39389             :         case TAG_MPEG4_Group:
   39390           0 :                 return Group_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39391             :         case TAG_MPEG4_ImageTexture:
   39392           0 :                 return ImageTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39393             :         case TAG_MPEG4_IndexedFaceSet:
   39394           0 :                 return IndexedFaceSet_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39395             :         case TAG_MPEG4_IndexedFaceSet2D:
   39396           0 :                 return IndexedFaceSet2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39397             :         case TAG_MPEG4_IndexedLineSet:
   39398           0 :                 return IndexedLineSet_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39399             :         case TAG_MPEG4_IndexedLineSet2D:
   39400           0 :                 return IndexedLineSet2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39401             :         case TAG_MPEG4_Inline:
   39402           0 :                 return Inline_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39403             :         case TAG_MPEG4_LOD:
   39404           0 :                 return LOD_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39405             :         case TAG_MPEG4_Layer2D:
   39406           0 :                 return Layer2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39407             :         case TAG_MPEG4_Layer3D:
   39408           0 :                 return Layer3D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39409             :         case TAG_MPEG4_Layout:
   39410           0 :                 return Layout_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39411             :         case TAG_MPEG4_LineProperties:
   39412           0 :                 return LineProperties_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39413             :         case TAG_MPEG4_ListeningPoint:
   39414           0 :                 return ListeningPoint_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39415             :         case TAG_MPEG4_Material:
   39416           0 :                 return Material_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39417             :         case TAG_MPEG4_Material2D:
   39418          14 :                 return Material2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39419             :         case TAG_MPEG4_MovieTexture:
   39420           0 :                 return MovieTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39421             :         case TAG_MPEG4_NavigationInfo:
   39422           0 :                 return NavigationInfo_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39423             :         case TAG_MPEG4_Normal:
   39424           0 :                 return Normal_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39425             :         case TAG_MPEG4_NormalInterpolator:
   39426           0 :                 return NormalInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39427             :         case TAG_MPEG4_OrderedGroup:
   39428           0 :                 return OrderedGroup_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39429             :         case TAG_MPEG4_OrientationInterpolator:
   39430           0 :                 return OrientationInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39431             :         case TAG_MPEG4_PixelTexture:
   39432           0 :                 return PixelTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39433             :         case TAG_MPEG4_PlaneSensor:
   39434           0 :                 return PlaneSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39435             :         case TAG_MPEG4_PlaneSensor2D:
   39436           0 :                 return PlaneSensor2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39437             :         case TAG_MPEG4_PointLight:
   39438           0 :                 return PointLight_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39439             :         case TAG_MPEG4_PointSet:
   39440           0 :                 return PointSet_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39441             :         case TAG_MPEG4_PointSet2D:
   39442           0 :                 return PointSet2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39443             :         case TAG_MPEG4_PositionInterpolator:
   39444           0 :                 return PositionInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39445             :         case TAG_MPEG4_PositionInterpolator2D:
   39446           0 :                 return PositionInterpolator2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39447             :         case TAG_MPEG4_ProximitySensor2D:
   39448           0 :                 return ProximitySensor2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39449             :         case TAG_MPEG4_ProximitySensor:
   39450           0 :                 return ProximitySensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39451             :         case TAG_MPEG4_QuantizationParameter:
   39452           0 :                 return QuantizationParameter_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39453             :         case TAG_MPEG4_Rectangle:
   39454           0 :                 return Rectangle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39455             :         case TAG_MPEG4_ScalarInterpolator:
   39456           0 :                 return ScalarInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39457             :         case TAG_MPEG4_Script:
   39458           0 :                 return Script_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39459             :         case TAG_MPEG4_Shape:
   39460           0 :                 return Shape_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39461             :         case TAG_MPEG4_Sound:
   39462           0 :                 return Sound_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39463             :         case TAG_MPEG4_Sound2D:
   39464           0 :                 return Sound2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39465             :         case TAG_MPEG4_Sphere:
   39466           0 :                 return Sphere_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39467             :         case TAG_MPEG4_SphereSensor:
   39468           0 :                 return SphereSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39469             :         case TAG_MPEG4_SpotLight:
   39470           0 :                 return SpotLight_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39471             :         case TAG_MPEG4_Switch:
   39472           0 :                 return Switch_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39473             :         case TAG_MPEG4_TermCap:
   39474           0 :                 return TermCap_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39475             :         case TAG_MPEG4_Text:
   39476           0 :                 return Text_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39477             :         case TAG_MPEG4_TextureCoordinate:
   39478           0 :                 return TextureCoordinate_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39479             :         case TAG_MPEG4_TextureTransform:
   39480           0 :                 return TextureTransform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39481             :         case TAG_MPEG4_TimeSensor:
   39482           0 :                 return TimeSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39483             :         case TAG_MPEG4_TouchSensor:
   39484           0 :                 return TouchSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39485             :         case TAG_MPEG4_Transform:
   39486           0 :                 return Transform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39487             :         case TAG_MPEG4_Transform2D:
   39488           7 :                 return Transform2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39489             :         case TAG_MPEG4_Valuator:
   39490           0 :                 return Valuator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39491             :         case TAG_MPEG4_Viewpoint:
   39492           0 :                 return Viewpoint_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39493             :         case TAG_MPEG4_VisibilitySensor:
   39494           0 :                 return VisibilitySensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39495             :         case TAG_MPEG4_Viseme:
   39496           0 :                 return Viseme_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39497             :         case TAG_MPEG4_WorldInfo:
   39498           0 :                 return WorldInfo_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39499             :         case TAG_MPEG4_AcousticMaterial:
   39500           0 :                 return AcousticMaterial_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39501             :         case TAG_MPEG4_AcousticScene:
   39502           0 :                 return AcousticScene_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39503             :         case TAG_MPEG4_ApplicationWindow:
   39504           0 :                 return ApplicationWindow_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39505             :         case TAG_MPEG4_BAP:
   39506           0 :                 return BAP_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39507             :         case TAG_MPEG4_BDP:
   39508           0 :                 return BDP_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39509             :         case TAG_MPEG4_Body:
   39510           0 :                 return Body_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39511             :         case TAG_MPEG4_BodyDefTable:
   39512           0 :                 return BodyDefTable_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39513             :         case TAG_MPEG4_BodySegmentConnectionHint:
   39514           0 :                 return BodySegmentConnectionHint_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39515             :         case TAG_MPEG4_DirectiveSound:
   39516           0 :                 return DirectiveSound_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39517             :         case TAG_MPEG4_Hierarchical3DMesh:
   39518           0 :                 return Hierarchical3DMesh_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39519             :         case TAG_MPEG4_MaterialKey:
   39520           0 :                 return MaterialKey_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39521             :         case TAG_MPEG4_PerceptualParameters:
   39522           0 :                 return PerceptualParameters_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39523             :         case TAG_MPEG4_TemporalTransform:
   39524           0 :                 return TemporalTransform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39525             :         case TAG_MPEG4_TemporalGroup:
   39526           0 :                 return TemporalGroup_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39527             :         case TAG_MPEG4_ServerCommand:
   39528           0 :                 return ServerCommand_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39529             :         case TAG_MPEG4_InputSensor:
   39530           0 :                 return InputSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39531             :         case TAG_MPEG4_MatteTexture:
   39532           0 :                 return MatteTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39533             :         case TAG_MPEG4_MediaBuffer:
   39534           0 :                 return MediaBuffer_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39535             :         case TAG_MPEG4_MediaControl:
   39536           0 :                 return MediaControl_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39537             :         case TAG_MPEG4_MediaSensor:
   39538           0 :                 return MediaSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39539             :         case TAG_MPEG4_BitWrapper:
   39540           0 :                 return BitWrapper_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39541             :         case TAG_MPEG4_CoordinateInterpolator4D:
   39542           0 :                 return CoordinateInterpolator4D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39543             :         case TAG_MPEG4_DepthImage:
   39544           0 :                 return DepthImage_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39545             :         case TAG_MPEG4_FFD:
   39546           0 :                 return FFD_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39547             :         case TAG_MPEG4_Implicit:
   39548           0 :                 return Implicit_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39549             :         case TAG_MPEG4_XXLFM_Appearance:
   39550           0 :                 return XXLFM_Appearance_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39551             :         case TAG_MPEG4_XXLFM_BlendList:
   39552           0 :                 return XXLFM_BlendList_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39553             :         case TAG_MPEG4_XXLFM_FrameList:
   39554           0 :                 return XXLFM_FrameList_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39555             :         case TAG_MPEG4_XXLFM_LightMap:
   39556           0 :                 return XXLFM_LightMap_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39557             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   39558           0 :                 return XXLFM_SurfaceMapList_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39559             :         case TAG_MPEG4_XXLFM_ViewMapList:
   39560           0 :                 return XXLFM_ViewMapList_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39561             :         case TAG_MPEG4_MeshGrid:
   39562           0 :                 return MeshGrid_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39563             :         case TAG_MPEG4_NonLinearDeformer:
   39564           0 :                 return NonLinearDeformer_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39565             :         case TAG_MPEG4_NurbsCurve:
   39566           0 :                 return NurbsCurve_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39567             :         case TAG_MPEG4_NurbsCurve2D:
   39568           0 :                 return NurbsCurve2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39569             :         case TAG_MPEG4_NurbsSurface:
   39570           0 :                 return NurbsSurface_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39571             :         case TAG_MPEG4_OctreeImage:
   39572           0 :                 return OctreeImage_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39573             :         case TAG_MPEG4_XXParticles:
   39574           0 :                 return XXParticles_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39575             :         case TAG_MPEG4_XXParticleInitBox:
   39576           0 :                 return XXParticleInitBox_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39577             :         case TAG_MPEG4_XXPlanarObstacle:
   39578           0 :                 return XXPlanarObstacle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39579             :         case TAG_MPEG4_XXPointAttractor:
   39580           0 :                 return XXPointAttractor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39581             :         case TAG_MPEG4_PointTexture:
   39582           0 :                 return PointTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39583             :         case TAG_MPEG4_PositionAnimator:
   39584           0 :                 return PositionAnimator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39585             :         case TAG_MPEG4_PositionAnimator2D:
   39586           0 :                 return PositionAnimator2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39587             :         case TAG_MPEG4_PositionInterpolator4D:
   39588           0 :                 return PositionInterpolator4D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39589             :         case TAG_MPEG4_ProceduralTexture:
   39590           0 :                 return ProceduralTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39591             :         case TAG_MPEG4_Quadric:
   39592           0 :                 return Quadric_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39593             :         case TAG_MPEG4_SBBone:
   39594           0 :                 return SBBone_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39595             :         case TAG_MPEG4_SBMuscle:
   39596           0 :                 return SBMuscle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39597             :         case TAG_MPEG4_SBSegment:
   39598           0 :                 return SBSegment_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39599             :         case TAG_MPEG4_SBSite:
   39600           0 :                 return SBSite_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39601             :         case TAG_MPEG4_SBSkinnedModel:
   39602           0 :                 return SBSkinnedModel_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39603             :         case TAG_MPEG4_SBVCAnimation:
   39604           0 :                 return SBVCAnimation_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39605             :         case TAG_MPEG4_ScalarAnimator:
   39606           0 :                 return ScalarAnimator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39607             :         case TAG_MPEG4_SimpleTexture:
   39608           0 :                 return SimpleTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39609             :         case TAG_MPEG4_SolidRep:
   39610           0 :                 return SolidRep_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39611             :         case TAG_MPEG4_SubdivisionSurface:
   39612           0 :                 return SubdivisionSurface_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39613             :         case TAG_MPEG4_SubdivSurfaceSector:
   39614           0 :                 return SubdivSurfaceSector_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39615             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   39616           0 :                 return WaveletSubdivisionSurface_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39617             :         case TAG_MPEG4_Clipper2D:
   39618           0 :                 return Clipper2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39619             :         case TAG_MPEG4_ColorTransform:
   39620           0 :                 return ColorTransform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39621             :         case TAG_MPEG4_Ellipse:
   39622           0 :                 return Ellipse_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39623             :         case TAG_MPEG4_LinearGradient:
   39624           0 :                 return LinearGradient_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39625             :         case TAG_MPEG4_PathLayout:
   39626           0 :                 return PathLayout_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39627             :         case TAG_MPEG4_RadialGradient:
   39628           0 :                 return RadialGradient_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39629             :         case TAG_MPEG4_SynthesizedTexture:
   39630           0 :                 return SynthesizedTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39631             :         case TAG_MPEG4_TransformMatrix2D:
   39632           0 :                 return TransformMatrix2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39633             :         case TAG_MPEG4_Viewport:
   39634           0 :                 return Viewport_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39635             :         case TAG_MPEG4_XCurve2D:
   39636           0 :                 return XCurve2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39637             :         case TAG_MPEG4_XFontStyle:
   39638           0 :                 return XFontStyle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39639             :         case TAG_MPEG4_XLineProperties:
   39640           0 :                 return XLineProperties_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39641             :         case TAG_MPEG4_AdvancedAudioBuffer:
   39642           0 :                 return AdvancedAudioBuffer_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39643             :         case TAG_MPEG4_AudioChannelConfig:
   39644           0 :                 return AudioChannelConfig_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39645             :         case TAG_MPEG4_DepthImageV2:
   39646           0 :                 return DepthImageV2_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39647             :         case TAG_MPEG4_MorphShape:
   39648           0 :                 return MorphShape_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39649             :         case TAG_MPEG4_MultiTexture:
   39650           0 :                 return MultiTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39651             :         case TAG_MPEG4_PointTextureV2:
   39652           0 :                 return PointTextureV2_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39653             :         case TAG_MPEG4_SBVCAnimationV2:
   39654           0 :                 return SBVCAnimationV2_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39655             :         case TAG_MPEG4_SimpleTextureV2:
   39656           0 :                 return SimpleTextureV2_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39657             :         case TAG_MPEG4_SurroundingSound:
   39658           0 :                 return SurroundingSound_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39659             :         case TAG_MPEG4_Transform3DAudio:
   39660           0 :                 return Transform3DAudio_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39661             :         case TAG_MPEG4_WideSound:
   39662           0 :                 return WideSound_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39663             :         case TAG_MPEG4_ScoreShape:
   39664           0 :                 return ScoreShape_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39665             :         case TAG_MPEG4_MusicScore:
   39666           0 :                 return MusicScore_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39667             :         case TAG_MPEG4_FootPrintSetNode:
   39668           0 :                 return FootPrintSetNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39669             :         case TAG_MPEG4_FootPrintNode:
   39670           0 :                 return FootPrintNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39671             :         case TAG_MPEG4_BuildingPartNode:
   39672           0 :                 return BuildingPartNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39673             :         case TAG_MPEG4_RoofNode:
   39674           0 :                 return RoofNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39675             :         case TAG_MPEG4_FacadeNode:
   39676           0 :                 return FacadeNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39677             :         case TAG_MPEG4_Shadow:
   39678           0 :                 return Shadow_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39679             :         case TAG_MPEG4_CacheTexture:
   39680           0 :                 return CacheTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39681             :         case TAG_MPEG4_EnvironmentTest:
   39682           0 :                 return EnvironmentTest_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39683             :         case TAG_MPEG4_KeyNavigator:
   39684           0 :                 return KeyNavigator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39685             :         case TAG_MPEG4_SpacePartition:
   39686           0 :                 return SpacePartition_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39687             :         case TAG_MPEG4_Storage:
   39688           0 :                 return Storage_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39689             :         default:
   39690           0 :                 return 0;
   39691             :         }
   39692         315 : }
   39693             : 
   39694             : u32 gf_sg_mpeg4_node_get_child_ndt(GF_Node *node)
   39695             : {
   39696         546 :         switch (node->sgprivate->tag) {
   39697             :         case TAG_MPEG4_Anchor:
   39698           0 :                 return NDT_SF3DNode;
   39699             :         case TAG_MPEG4_AudioBuffer:
   39700           0 :                 return NDT_SFAudioNode;
   39701             :         case TAG_MPEG4_AudioDelay:
   39702           0 :                 return NDT_SFAudioNode;
   39703             :         case TAG_MPEG4_AudioFX:
   39704           0 :                 return NDT_SFAudioNode;
   39705             :         case TAG_MPEG4_AudioMix:
   39706           0 :                 return NDT_SFAudioNode;
   39707             :         case TAG_MPEG4_AudioSource:
   39708           0 :                 return NDT_SFAudioNode;
   39709             :         case TAG_MPEG4_AudioSwitch:
   39710           0 :                 return NDT_SFAudioNode;
   39711             :         case TAG_MPEG4_Billboard:
   39712           0 :                 return NDT_SF3DNode;
   39713             :         case TAG_MPEG4_Collision:
   39714           0 :                 return NDT_SF3DNode;
   39715             :         case TAG_MPEG4_CompositeTexture2D:
   39716           0 :                 return NDT_SF2DNode;
   39717             :         case TAG_MPEG4_CompositeTexture3D:
   39718           0 :                 return NDT_SF3DNode;
   39719             :         case TAG_MPEG4_Face:
   39720           0 :                 return NDT_SF3DNode;
   39721             :         case TAG_MPEG4_FaceDefTables:
   39722           0 :                 return NDT_SFFaceDefMeshNode;
   39723             :         case TAG_MPEG4_FDP:
   39724           0 :                 return NDT_SFFaceDefTablesNode;
   39725             :         case TAG_MPEG4_Form:
   39726           0 :                 return NDT_SF2DNode;
   39727             :         case TAG_MPEG4_Group:
   39728           0 :                 return NDT_SF3DNode;
   39729             :         case TAG_MPEG4_LOD:
   39730           0 :                 return NDT_SF3DNode;
   39731             :         case TAG_MPEG4_Layer2D:
   39732           0 :                 return NDT_SF2DNode;
   39733             :         case TAG_MPEG4_Layer3D:
   39734           0 :                 return NDT_SF3DNode;
   39735             :         case TAG_MPEG4_Layout:
   39736           0 :                 return NDT_SF2DNode;
   39737             :         case TAG_MPEG4_OrderedGroup:
   39738          63 :                 return NDT_SF3DNode;
   39739             :         case TAG_MPEG4_Switch:
   39740           0 :                 return NDT_SF3DNode;
   39741             :         case TAG_MPEG4_Transform:
   39742           0 :                 return NDT_SF3DNode;
   39743             :         case TAG_MPEG4_Transform2D:
   39744         210 :                 return NDT_SF2DNode;
   39745             :         case TAG_MPEG4_BDP:
   39746           0 :                 return NDT_SFBodyDefTableNode;
   39747             :         case TAG_MPEG4_Body:
   39748           0 :                 return NDT_SF3DNode;
   39749             :         case TAG_MPEG4_TemporalTransform:
   39750           0 :                 return NDT_SF3DNode;
   39751             :         case TAG_MPEG4_TemporalGroup:
   39752           0 :                 return NDT_SFTemporalNode;
   39753             :         case TAG_MPEG4_FFD:
   39754           0 :                 return NDT_SF3DNode;
   39755             :         case TAG_MPEG4_XXLFM_Appearance:
   39756           0 :                 return NDT_SFLightMapNode;
   39757             :         case TAG_MPEG4_OctreeImage:
   39758           0 :                 return NDT_SFDepthImageNode;
   39759             :         case TAG_MPEG4_XXParticles:
   39760           0 :                 return NDT_SFInfluenceNode;
   39761             :         case TAG_MPEG4_SBBone:
   39762           0 :                 return NDT_SF3DNode;
   39763             :         case TAG_MPEG4_SBSegment:
   39764           0 :                 return NDT_SF3DNode;
   39765             :         case TAG_MPEG4_SBSite:
   39766           0 :                 return NDT_SF3DNode;
   39767             :         case TAG_MPEG4_SBSkinnedModel:
   39768           0 :                 return NDT_SFSBBoneNode;
   39769             :         case TAG_MPEG4_SBVCAnimation:
   39770           0 :                 return NDT_SF3DNode;
   39771             :         case TAG_MPEG4_SubdivisionSurface:
   39772           0 :                 return NDT_SFSubdivSurfaceSectorNode;
   39773             :         case TAG_MPEG4_Clipper2D:
   39774           0 :                 return NDT_SF2DNode;
   39775             :         case TAG_MPEG4_ColorTransform:
   39776           0 :                 return NDT_SF3DNode;
   39777             :         case TAG_MPEG4_PathLayout:
   39778           0 :                 return NDT_SF2DNode;
   39779             :         case TAG_MPEG4_TransformMatrix2D:
   39780           0 :                 return NDT_SF2DNode;
   39781             :         case TAG_MPEG4_AdvancedAudioBuffer:
   39782           0 :                 return NDT_SFAudioNode;
   39783             :         case TAG_MPEG4_AudioChannelConfig:
   39784           0 :                 return NDT_SFAudioNode;
   39785             :         case TAG_MPEG4_MorphShape:
   39786           0 :                 return NDT_SF3DNode;
   39787             :         case TAG_MPEG4_MultiTexture:
   39788           0 :                 return NDT_SFTextureNode;
   39789             :         case TAG_MPEG4_SBVCAnimationV2:
   39790           0 :                 return NDT_SF3DNode;
   39791             :         case TAG_MPEG4_Transform3DAudio:
   39792           0 :                 return NDT_SF3DNode;
   39793             :         case TAG_MPEG4_FootPrintSetNode:
   39794           0 :                 return NDT_SFGeometryNode;
   39795             :         case TAG_MPEG4_BuildingPartNode:
   39796           0 :                 return NDT_SFGeometryNode;
   39797             :         case TAG_MPEG4_FacadeNode:
   39798           0 :                 return NDT_SFGeometryNode;
   39799             :         case TAG_MPEG4_Shadow:
   39800           0 :                 return NDT_SF3DNode;
   39801             :         case TAG_MPEG4_SpacePartition:
   39802           0 :                 return NDT_SF3DNode;
   39803             :         default:
   39804           0 :                 return 0;
   39805             :         }
   39806         273 : }
   39807             : 
   39808             : 
   39809             : GF_EXPORT
   39810             : u32 gf_node_mpeg4_type_by_class_name(const char *node_name)
   39811             : {
   39812      189688 :         if(!node_name) return 0;
   39813       94874 :         if (!strcmp(node_name, "Anchor")) return TAG_MPEG4_Anchor;
   39814       94850 :         if (!strcmp(node_name, "AnimationStream")) return TAG_MPEG4_AnimationStream;
   39815      101668 :         if (!strcmp(node_name, "Appearance")) return TAG_MPEG4_Appearance;
   39816       87894 :         if (!strcmp(node_name, "AudioBuffer")) return TAG_MPEG4_AudioBuffer;
   39817       87912 :         if (!strcmp(node_name, "AudioClip")) return TAG_MPEG4_AudioClip;
   39818       87852 :         if (!strcmp(node_name, "AudioDelay")) return TAG_MPEG4_AudioDelay;
   39819       87852 :         if (!strcmp(node_name, "AudioFX")) return TAG_MPEG4_AudioFX;
   39820       87852 :         if (!strcmp(node_name, "AudioMix")) return TAG_MPEG4_AudioMix;
   39821       87895 :         if (!strcmp(node_name, "AudioSource")) return TAG_MPEG4_AudioSource;
   39822       87809 :         if (!strcmp(node_name, "AudioSwitch")) return TAG_MPEG4_AudioSwitch;
   39823       87831 :         if (!strcmp(node_name, "Background")) return TAG_MPEG4_Background;
   39824       89515 :         if (!strcmp(node_name, "Background2D")) return TAG_MPEG4_Background2D;
   39825       86077 :         if (!strcmp(node_name, "Billboard")) return TAG_MPEG4_Billboard;
   39826       86223 :         if (!strcmp(node_name, "Bitmap")) return TAG_MPEG4_Bitmap;
   39827       86117 :         if (!strcmp(node_name, "Box")) return TAG_MPEG4_Box;
   39828       86273 :         if (!strcmp(node_name, "Circle")) return TAG_MPEG4_Circle;
   39829       84941 :         if (!strcmp(node_name, "Collision")) return TAG_MPEG4_Collision;
   39830       84969 :         if (!strcmp(node_name, "Color")) return TAG_MPEG4_Color;
   39831       84901 :         if (!strcmp(node_name, "ColorInterpolator")) return TAG_MPEG4_ColorInterpolator;
   39832       84862 :         if (!strcmp(node_name, "CompositeTexture2D")) return TAG_MPEG4_CompositeTexture2D;
   39833       84808 :         if (!strcmp(node_name, "CompositeTexture3D")) return TAG_MPEG4_CompositeTexture3D;
   39834       87524 :         if (!strcmp(node_name, "Conditional")) return TAG_MPEG4_Conditional;
   39835       82080 :         if (!strcmp(node_name, "Cone")) return TAG_MPEG4_Cone;
   39836       82040 :         if (!strcmp(node_name, "Coordinate")) return TAG_MPEG4_Coordinate;
   39837       83025 :         if (!strcmp(node_name, "Coordinate2D")) return TAG_MPEG4_Coordinate2D;
   39838       80927 :         if (!strcmp(node_name, "CoordinateInterpolator")) return TAG_MPEG4_CoordinateInterpolator;
   39839       80939 :         if (!strcmp(node_name, "CoordinateInterpolator2D")) return TAG_MPEG4_CoordinateInterpolator2D;
   39840       81285 :         if (!strcmp(node_name, "Curve2D")) return TAG_MPEG4_Curve2D;
   39841       80635 :         if (!strcmp(node_name, "Cylinder")) return TAG_MPEG4_Cylinder;
   39842       80461 :         if (!strcmp(node_name, "CylinderSensor")) return TAG_MPEG4_CylinderSensor;
   39843       80479 :         if (!strcmp(node_name, "DirectionalLight")) return TAG_MPEG4_DirectionalLight;
   39844       80437 :         if (!strcmp(node_name, "DiscSensor")) return TAG_MPEG4_DiscSensor;
   39845       80407 :         if (!strcmp(node_name, "ElevationGrid")) return TAG_MPEG4_ElevationGrid;
   39846       80395 :         if (!strcmp(node_name, "Expression")) return TAG_MPEG4_Expression;
   39847       80401 :         if (!strcmp(node_name, "Extrusion")) return TAG_MPEG4_Extrusion;
   39848       80389 :         if (!strcmp(node_name, "Face")) return TAG_MPEG4_Face;
   39849       80389 :         if (!strcmp(node_name, "FaceDefMesh")) return TAG_MPEG4_FaceDefMesh;
   39850       80389 :         if (!strcmp(node_name, "FaceDefTables")) return TAG_MPEG4_FaceDefTables;
   39851       80389 :         if (!strcmp(node_name, "FaceDefTransform")) return TAG_MPEG4_FaceDefTransform;
   39852       80389 :         if (!strcmp(node_name, "FAP")) return TAG_MPEG4_FAP;
   39853       80389 :         if (!strcmp(node_name, "FDP")) return TAG_MPEG4_FDP;
   39854       80389 :         if (!strcmp(node_name, "FIT")) return TAG_MPEG4_FIT;
   39855       80395 :         if (!strcmp(node_name, "Fog")) return TAG_MPEG4_Fog;
   39856       83623 :         if (!strcmp(node_name, "FontStyle")) return TAG_MPEG4_FontStyle;
   39857       77245 :         if (!strcmp(node_name, "Form")) return TAG_MPEG4_Form;
   39858       77533 :         if (!strcmp(node_name, "Group")) return TAG_MPEG4_Group;
   39859       76864 :         if (!strcmp(node_name, "ImageTexture")) return TAG_MPEG4_ImageTexture;
   39860       76252 :         if (!strcmp(node_name, "IndexedFaceSet")) return TAG_MPEG4_IndexedFaceSet;
   39861       76693 :         if (!strcmp(node_name, "IndexedFaceSet2D")) return TAG_MPEG4_IndexedFaceSet2D;
   39862       75751 :         if (!strcmp(node_name, "IndexedLineSet")) return TAG_MPEG4_IndexedLineSet;
   39863       75936 :         if (!strcmp(node_name, "IndexedLineSet2D")) return TAG_MPEG4_IndexedLineSet2D;
   39864       75627 :         if (!strcmp(node_name, "Inline")) return TAG_MPEG4_Inline;
   39865       75415 :         if (!strcmp(node_name, "LOD")) return TAG_MPEG4_LOD;
   39866       75541 :         if (!strcmp(node_name, "Layer2D")) return TAG_MPEG4_Layer2D;
   39867       75295 :         if (!strcmp(node_name, "Layer3D")) return TAG_MPEG4_Layer3D;
   39868       76075 :         if (!strcmp(node_name, "Layout")) return TAG_MPEG4_Layout;
   39869       74666 :         if (!strcmp(node_name, "LineProperties")) return TAG_MPEG4_LineProperties;
   39870       74124 :         if (!strcmp(node_name, "ListeningPoint")) return TAG_MPEG4_ListeningPoint;
   39871       74538 :         if (!strcmp(node_name, "Material")) return TAG_MPEG4_Material;
   39872       77170 :         if (!strcmp(node_name, "Material2D")) return TAG_MPEG4_Material2D;
   39873       70415 :         if (!strcmp(node_name, "MovieTexture")) return TAG_MPEG4_MovieTexture;
   39874       70173 :         if (!strcmp(node_name, "NavigationInfo")) return TAG_MPEG4_NavigationInfo;
   39875       69997 :         if (!strcmp(node_name, "Normal")) return TAG_MPEG4_Normal;
   39876       69997 :         if (!strcmp(node_name, "NormalInterpolator")) return TAG_MPEG4_NormalInterpolator;
   39877       71502 :         if (!strcmp(node_name, "OrderedGroup")) return TAG_MPEG4_OrderedGroup;
   39878       68588 :         if (!strcmp(node_name, "OrientationInterpolator")) return TAG_MPEG4_OrientationInterpolator;
   39879       68420 :         if (!strcmp(node_name, "PixelTexture")) return TAG_MPEG4_PixelTexture;
   39880       68378 :         if (!strcmp(node_name, "PlaneSensor")) return TAG_MPEG4_PlaneSensor;
   39881       68460 :         if (!strcmp(node_name, "PlaneSensor2D")) return TAG_MPEG4_PlaneSensor2D;
   39882       68278 :         if (!strcmp(node_name, "PointLight")) return TAG_MPEG4_PointLight;
   39883       68272 :         if (!strcmp(node_name, "PointSet")) return TAG_MPEG4_PointSet;
   39884       68291 :         if (!strcmp(node_name, "PointSet2D")) return TAG_MPEG4_PointSet2D;
   39885       68295 :         if (!strcmp(node_name, "PositionInterpolator")) return TAG_MPEG4_PositionInterpolator;
   39886       68367 :         if (!strcmp(node_name, "PositionInterpolator2D")) return TAG_MPEG4_PositionInterpolator2D;
   39887       67971 :         if (!strcmp(node_name, "ProximitySensor2D")) return TAG_MPEG4_ProximitySensor2D;
   39888       67953 :         if (!strcmp(node_name, "ProximitySensor")) return TAG_MPEG4_ProximitySensor;
   39889       67983 :         if (!strcmp(node_name, "QuantizationParameter")) return TAG_MPEG4_QuantizationParameter;
   39890       69670 :         if (!strcmp(node_name, "Rectangle")) return TAG_MPEG4_Rectangle;
   39891       66384 :         if (!strcmp(node_name, "ScalarInterpolator")) return TAG_MPEG4_ScalarInterpolator;
   39892       66053 :         if (!strcmp(node_name, "Script")) return TAG_MPEG4_Script;
   39893       77228 :         if (!strcmp(node_name, "Shape")) return TAG_MPEG4_Shape;
   39894       54166 :         if (!strcmp(node_name, "Sound")) return TAG_MPEG4_Sound;
   39895       54207 :         if (!strcmp(node_name, "Sound2D")) return TAG_MPEG4_Sound2D;
   39896       54143 :         if (!strcmp(node_name, "Sphere")) return TAG_MPEG4_Sphere;
   39897       54017 :         if (!strcmp(node_name, "SphereSensor")) return TAG_MPEG4_SphereSensor;
   39898       54011 :         if (!strcmp(node_name, "SpotLight")) return TAG_MPEG4_SpotLight;
   39899       54180 :         if (!strcmp(node_name, "Switch")) return TAG_MPEG4_Switch;
   39900       53818 :         if (!strcmp(node_name, "TermCap")) return TAG_MPEG4_TermCap;
   39901       57936 :         if (!strcmp(node_name, "Text")) return TAG_MPEG4_Text;
   39902       49700 :         if (!strcmp(node_name, "TextureCoordinate")) return TAG_MPEG4_TextureCoordinate;
   39903       49778 :         if (!strcmp(node_name, "TextureTransform")) return TAG_MPEG4_TextureTransform;
   39904       50271 :         if (!strcmp(node_name, "TimeSensor")) return TAG_MPEG4_TimeSensor;
   39905       50831 :         if (!strcmp(node_name, "TouchSensor")) return TAG_MPEG4_TouchSensor;
   39906       47987 :         if (!strcmp(node_name, "Transform")) return TAG_MPEG4_Transform;
   39907       56057 :         if (!strcmp(node_name, "Transform2D")) return TAG_MPEG4_Transform2D;
   39908       38370 :         if (!strcmp(node_name, "Valuator")) return TAG_MPEG4_Valuator;
   39909       34686 :         if (!strcmp(node_name, "Viewpoint")) return TAG_MPEG4_Viewpoint;
   39910       34296 :         if (!strcmp(node_name, "VisibilitySensor")) return TAG_MPEG4_VisibilitySensor;
   39911       34284 :         if (!strcmp(node_name, "Viseme")) return TAG_MPEG4_Viseme;
   39912       36046 :         if (!strcmp(node_name, "WorldInfo")) return TAG_MPEG4_WorldInfo;
   39913       32522 :         if (!strcmp(node_name, "AcousticMaterial")) return TAG_MPEG4_AcousticMaterial;
   39914       32522 :         if (!strcmp(node_name, "AcousticScene")) return TAG_MPEG4_AcousticScene;
   39915       32522 :         if (!strcmp(node_name, "ApplicationWindow")) return TAG_MPEG4_ApplicationWindow;
   39916       32522 :         if (!strcmp(node_name, "BAP")) return TAG_MPEG4_BAP;
   39917       32522 :         if (!strcmp(node_name, "BDP")) return TAG_MPEG4_BDP;
   39918       32522 :         if (!strcmp(node_name, "Body")) return TAG_MPEG4_Body;
   39919       32522 :         if (!strcmp(node_name, "BodyDefTable")) return TAG_MPEG4_BodyDefTable;
   39920       32522 :         if (!strcmp(node_name, "BodySegmentConnectionHint")) return TAG_MPEG4_BodySegmentConnectionHint;
   39921       32522 :         if (!strcmp(node_name, "DirectiveSound")) return TAG_MPEG4_DirectiveSound;
   39922       32522 :         if (!strcmp(node_name, "Hierarchical3DMesh")) return TAG_MPEG4_Hierarchical3DMesh;
   39923       32528 :         if (!strcmp(node_name, "MaterialKey")) return TAG_MPEG4_MaterialKey;
   39924       32516 :         if (!strcmp(node_name, "PerceptualParameters")) return TAG_MPEG4_PerceptualParameters;
   39925       32516 :         if (!strcmp(node_name, "TemporalTransform")) return TAG_MPEG4_TemporalTransform;
   39926       32516 :         if (!strcmp(node_name, "TemporalGroup")) return TAG_MPEG4_TemporalGroup;
   39927       32516 :         if (!strcmp(node_name, "ServerCommand")) return TAG_MPEG4_ServerCommand;
   39928       32534 :         if (!strcmp(node_name, "InputSensor")) return TAG_MPEG4_InputSensor;
   39929       32498 :         if (!strcmp(node_name, "MatteTexture")) return TAG_MPEG4_MatteTexture;
   39930       32498 :         if (!strcmp(node_name, "MediaBuffer")) return TAG_MPEG4_MediaBuffer;
   39931       32603 :         if (!strcmp(node_name, "MediaControl")) return TAG_MPEG4_MediaControl;
   39932       32476 :         if (!strcmp(node_name, "MediaSensor")) return TAG_MPEG4_MediaSensor;
   39933       32310 :         if (!strcmp(node_name, "BitWrapper")) return TAG_MPEG4_BitWrapper;
   39934       32310 :         if (!strcmp(node_name, "CoordinateInterpolator4D")) return TAG_MPEG4_CoordinateInterpolator4D;
   39935       32310 :         if (!strcmp(node_name, "DepthImage")) return TAG_MPEG4_DepthImage;
   39936       32310 :         if (!strcmp(node_name, "FFD")) return TAG_MPEG4_FFD;
   39937       32310 :         if (!strcmp(node_name, "Implicit")) return TAG_MPEG4_Implicit;
   39938       32310 :         if (!strcmp(node_name, "XXLFM_Appearance")) return TAG_MPEG4_XXLFM_Appearance;
   39939       32310 :         if (!strcmp(node_name, "XXLFM_BlendList")) return TAG_MPEG4_XXLFM_BlendList;
   39940       32310 :         if (!strcmp(node_name, "XXLFM_FrameList")) return TAG_MPEG4_XXLFM_FrameList;
   39941       32310 :         if (!strcmp(node_name, "XXLFM_LightMap")) return TAG_MPEG4_XXLFM_LightMap;
   39942       32310 :         if (!strcmp(node_name, "XXLFM_SurfaceMapList")) return TAG_MPEG4_XXLFM_SurfaceMapList;
   39943       32310 :         if (!strcmp(node_name, "XXLFM_ViewMapList")) return TAG_MPEG4_XXLFM_ViewMapList;
   39944       32310 :         if (!strcmp(node_name, "MeshGrid")) return TAG_MPEG4_MeshGrid;
   39945       32320 :         if (!strcmp(node_name, "NonLinearDeformer")) return TAG_MPEG4_NonLinearDeformer;
   39946       32300 :         if (!strcmp(node_name, "NurbsCurve")) return TAG_MPEG4_NurbsCurve;
   39947       32300 :         if (!strcmp(node_name, "NurbsCurve2D")) return TAG_MPEG4_NurbsCurve2D;
   39948       32300 :         if (!strcmp(node_name, "NurbsSurface")) return TAG_MPEG4_NurbsSurface;
   39949       32300 :         if (!strcmp(node_name, "OctreeImage")) return TAG_MPEG4_OctreeImage;
   39950       32300 :         if (!strcmp(node_name, "XXParticles")) return TAG_MPEG4_XXParticles;
   39951       32300 :         if (!strcmp(node_name, "XXParticleInitBox")) return TAG_MPEG4_XXParticleInitBox;
   39952       32300 :         if (!strcmp(node_name, "XXPlanarObstacle")) return TAG_MPEG4_XXPlanarObstacle;
   39953       32300 :         if (!strcmp(node_name, "XXPointAttractor")) return TAG_MPEG4_XXPointAttractor;
   39954       32300 :         if (!strcmp(node_name, "PointTexture")) return TAG_MPEG4_PointTexture;
   39955       32306 :         if (!strcmp(node_name, "PositionAnimator")) return TAG_MPEG4_PositionAnimator;
   39956       32300 :         if (!strcmp(node_name, "PositionAnimator2D")) return TAG_MPEG4_PositionAnimator2D;
   39957       32288 :         if (!strcmp(node_name, "PositionInterpolator4D")) return TAG_MPEG4_PositionInterpolator4D;
   39958       32288 :         if (!strcmp(node_name, "ProceduralTexture")) return TAG_MPEG4_ProceduralTexture;
   39959       32288 :         if (!strcmp(node_name, "Quadric")) return TAG_MPEG4_Quadric;
   39960       32288 :         if (!strcmp(node_name, "SBBone")) return TAG_MPEG4_SBBone;
   39961       32288 :         if (!strcmp(node_name, "SBMuscle")) return TAG_MPEG4_SBMuscle;
   39962       32288 :         if (!strcmp(node_name, "SBSegment")) return TAG_MPEG4_SBSegment;
   39963       32288 :         if (!strcmp(node_name, "SBSite")) return TAG_MPEG4_SBSite;
   39964       32288 :         if (!strcmp(node_name, "SBSkinnedModel")) return TAG_MPEG4_SBSkinnedModel;
   39965       32288 :         if (!strcmp(node_name, "SBVCAnimation")) return TAG_MPEG4_SBVCAnimation;
   39966       32294 :         if (!strcmp(node_name, "ScalarAnimator")) return TAG_MPEG4_ScalarAnimator;
   39967       32282 :         if (!strcmp(node_name, "SimpleTexture")) return TAG_MPEG4_SimpleTexture;
   39968       32282 :         if (!strcmp(node_name, "SolidRep")) return TAG_MPEG4_SolidRep;
   39969       32282 :         if (!strcmp(node_name, "SubdivisionSurface")) return TAG_MPEG4_SubdivisionSurface;
   39970       32282 :         if (!strcmp(node_name, "SubdivSurfaceSector")) return TAG_MPEG4_SubdivSurfaceSector;
   39971       32282 :         if (!strcmp(node_name, "WaveletSubdivisionSurface")) return TAG_MPEG4_WaveletSubdivisionSurface;
   39972       32294 :         if (!strcmp(node_name, "Clipper2D")) return TAG_MPEG4_Clipper2D;
   39973       32306 :         if (!strcmp(node_name, "ColorTransform")) return TAG_MPEG4_ColorTransform;
   39974       32246 :         if (!strcmp(node_name, "Ellipse")) return TAG_MPEG4_Ellipse;
   39975       32266 :         if (!strcmp(node_name, "LinearGradient")) return TAG_MPEG4_LinearGradient;
   39976       32190 :         if (!strcmp(node_name, "PathLayout")) return TAG_MPEG4_PathLayout;
   39977       32214 :         if (!strcmp(node_name, "RadialGradient")) return TAG_MPEG4_RadialGradient;
   39978       32118 :         if (!strcmp(node_name, "SynthesizedTexture")) return TAG_MPEG4_SynthesizedTexture;
   39979       32214 :         if (!strcmp(node_name, "TransformMatrix2D")) return TAG_MPEG4_TransformMatrix2D;
   39980       32128 :         if (!strcmp(node_name, "Viewport")) return TAG_MPEG4_Viewport;
   39981       31952 :         if (!strcmp(node_name, "XCurve2D")) return TAG_MPEG4_XCurve2D;
   39982       31880 :         if (!strcmp(node_name, "XFontStyle")) return TAG_MPEG4_XFontStyle;
   39983       32036 :         if (!strcmp(node_name, "XLineProperties")) return TAG_MPEG4_XLineProperties;
   39984       31724 :         if (!strcmp(node_name, "AdvancedAudioBuffer")) return TAG_MPEG4_AdvancedAudioBuffer;
   39985       31724 :         if (!strcmp(node_name, "AudioChannelConfig")) return TAG_MPEG4_AudioChannelConfig;
   39986       31724 :         if (!strcmp(node_name, "DepthImageV2")) return TAG_MPEG4_DepthImageV2;
   39987       31724 :         if (!strcmp(node_name, "MorphShape")) return TAG_MPEG4_MorphShape;
   39988       31724 :         if (!strcmp(node_name, "MultiTexture")) return TAG_MPEG4_MultiTexture;
   39989       31724 :         if (!strcmp(node_name, "PointTextureV2")) return TAG_MPEG4_PointTextureV2;
   39990       31724 :         if (!strcmp(node_name, "SBVCAnimationV2")) return TAG_MPEG4_SBVCAnimationV2;
   39991       31724 :         if (!strcmp(node_name, "SimpleTextureV2")) return TAG_MPEG4_SimpleTextureV2;
   39992       31724 :         if (!strcmp(node_name, "SurroundingSound")) return TAG_MPEG4_SurroundingSound;
   39993       31724 :         if (!strcmp(node_name, "Transform3DAudio")) return TAG_MPEG4_Transform3DAudio;
   39994       31724 :         if (!strcmp(node_name, "WideSound")) return TAG_MPEG4_WideSound;
   39995       31724 :         if (!strcmp(node_name, "ScoreShape")) return TAG_MPEG4_ScoreShape;
   39996       31724 :         if (!strcmp(node_name, "MusicScore")) return TAG_MPEG4_MusicScore;
   39997       31724 :         if (!strcmp(node_name, "FootPrintSetNode")) return TAG_MPEG4_FootPrintSetNode;
   39998       31724 :         if (!strcmp(node_name, "FootPrintNode")) return TAG_MPEG4_FootPrintNode;
   39999       31724 :         if (!strcmp(node_name, "BuildingPartNode")) return TAG_MPEG4_BuildingPartNode;
   40000       31724 :         if (!strcmp(node_name, "RoofNode")) return TAG_MPEG4_RoofNode;
   40001       31724 :         if (!strcmp(node_name, "FacadeNode")) return TAG_MPEG4_FacadeNode;
   40002       31724 :         if (!strcmp(node_name, "Shadow")) return TAG_MPEG4_Shadow;
   40003       31736 :         if (!strcmp(node_name, "CacheTexture")) return TAG_MPEG4_CacheTexture;
   40004       31730 :         if (!strcmp(node_name, "EnvironmentTest")) return TAG_MPEG4_EnvironmentTest;
   40005       31754 :         if (!strcmp(node_name, "KeyNavigator")) return TAG_MPEG4_KeyNavigator;
   40006       31634 :         if (!strcmp(node_name, "SpacePartition")) return TAG_MPEG4_SpacePartition;
   40007       31640 :         if (!strcmp(node_name, "Storage")) return TAG_MPEG4_Storage;
   40008       31628 :         return 0;
   40009       94844 : }
   40010             : 
   40011             : s32 gf_sg_mpeg4_node_get_field_index_by_name(GF_Node *node, char *name)
   40012             : {
   40013      182340 :         switch (node->sgprivate->tag) {
   40014             :         case TAG_MPEG4_Anchor:
   40015          40 :                 return Anchor_get_field_index_by_name(name);
   40016             :         case TAG_MPEG4_AnimationStream:
   40017          77 :                 return AnimationStream_get_field_index_by_name(name);
   40018             :         case TAG_MPEG4_Appearance:
   40019        3335 :                 return Appearance_get_field_index_by_name(name);
   40020             :         case TAG_MPEG4_AudioBuffer:
   40021          36 :                 return AudioBuffer_get_field_index_by_name(name);
   40022             :         case TAG_MPEG4_AudioClip:
   40023          56 :                 return AudioClip_get_field_index_by_name(name);
   40024             :         case TAG_MPEG4_AudioDelay:
   40025           0 :                 return AudioDelay_get_field_index_by_name(name);
   40026             :         case TAG_MPEG4_AudioFX:
   40027           0 :                 return AudioFX_get_field_index_by_name(name);
   40028             :         case TAG_MPEG4_AudioMix:
   40029           0 :                 return AudioMix_get_field_index_by_name(name);
   40030             :         case TAG_MPEG4_AudioSource:
   40031          84 :                 return AudioSource_get_field_index_by_name(name);
   40032             :         case TAG_MPEG4_AudioSwitch:
   40033           0 :                 return AudioSwitch_get_field_index_by_name(name);
   40034             :         case TAG_MPEG4_Background:
   40035          64 :                 return Background_get_field_index_by_name(name);
   40036             :         case TAG_MPEG4_Background2D:
   40037        1241 :                 return Background2D_get_field_index_by_name(name);
   40038             :         case TAG_MPEG4_Billboard:
   40039          22 :                 return Billboard_get_field_index_by_name(name);
   40040             :         case TAG_MPEG4_Bitmap:
   40041          40 :                 return Bitmap_get_field_index_by_name(name);
   40042             :         case TAG_MPEG4_Box:
   40043         154 :                 return Box_get_field_index_by_name(name);
   40044             :         case TAG_MPEG4_Circle:
   40045         442 :                 return Circle_get_field_index_by_name(name);
   40046             :         case TAG_MPEG4_Collision:
   40047          20 :                 return Collision_get_field_index_by_name(name);
   40048             :         case TAG_MPEG4_Color:
   40049          32 :                 return Color_get_field_index_by_name(name);
   40050             :         case TAG_MPEG4_ColorInterpolator:
   40051          96 :                 return ColorInterpolator_get_field_index_by_name(name);
   40052             :         case TAG_MPEG4_CompositeTexture2D:
   40053         141 :                 return CompositeTexture2D_get_field_index_by_name(name);
   40054             :         case TAG_MPEG4_CompositeTexture3D:
   40055          24 :                 return CompositeTexture3D_get_field_index_by_name(name);
   40056             :         case TAG_MPEG4_Conditional:
   40057        3668 :                 return Conditional_get_field_index_by_name(name);
   40058             :         case TAG_MPEG4_Cone:
   40059          60 :                 return Cone_get_field_index_by_name(name);
   40060             :         case TAG_MPEG4_Coordinate:
   40061          16 :                 return Coordinate_get_field_index_by_name(name);
   40062             :         case TAG_MPEG4_Coordinate2D:
   40063        1440 :                 return Coordinate2D_get_field_index_by_name(name);
   40064             :         case TAG_MPEG4_CoordinateInterpolator:
   40065           0 :                 return CoordinateInterpolator_get_field_index_by_name(name);
   40066             :         case TAG_MPEG4_CoordinateInterpolator2D:
   40067          32 :                 return CoordinateInterpolator2D_get_field_index_by_name(name);
   40068             :         case TAG_MPEG4_Curve2D:
   40069        1423 :                 return Curve2D_get_field_index_by_name(name);
   40070             :         case TAG_MPEG4_Cylinder:
   40071         180 :                 return Cylinder_get_field_index_by_name(name);
   40072             :         case TAG_MPEG4_CylinderSensor:
   40073          16 :                 return CylinderSensor_get_field_index_by_name(name);
   40074             :         case TAG_MPEG4_DirectionalLight:
   40075          32 :                 return DirectionalLight_get_field_index_by_name(name);
   40076             :         case TAG_MPEG4_DiscSensor:
   40077          16 :                 return DiscSensor_get_field_index_by_name(name);
   40078             :         case TAG_MPEG4_ElevationGrid:
   40079          24 :                 return ElevationGrid_get_field_index_by_name(name);
   40080             :         case TAG_MPEG4_Expression:
   40081           0 :                 return Expression_get_field_index_by_name(name);
   40082             :         case TAG_MPEG4_Extrusion:
   40083          26 :                 return Extrusion_get_field_index_by_name(name);
   40084             :         case TAG_MPEG4_Face:
   40085           0 :                 return Face_get_field_index_by_name(name);
   40086             :         case TAG_MPEG4_FaceDefMesh:
   40087           0 :                 return FaceDefMesh_get_field_index_by_name(name);
   40088             :         case TAG_MPEG4_FaceDefTables:
   40089           0 :                 return FaceDefTables_get_field_index_by_name(name);
   40090             :         case TAG_MPEG4_FaceDefTransform:
   40091           0 :                 return FaceDefTransform_get_field_index_by_name(name);
   40092             :         case TAG_MPEG4_FAP:
   40093           0 :                 return FAP_get_field_index_by_name(name);
   40094             :         case TAG_MPEG4_FDP:
   40095           0 :                 return FDP_get_field_index_by_name(name);
   40096             :         case TAG_MPEG4_FIT:
   40097           0 :                 return FIT_get_field_index_by_name(name);
   40098             :         case TAG_MPEG4_Fog:
   40099          16 :                 return Fog_get_field_index_by_name(name);
   40100             :         case TAG_MPEG4_FontStyle:
   40101        3045 :                 return FontStyle_get_field_index_by_name(name);
   40102             :         case TAG_MPEG4_Form:
   40103         300 :                 return Form_get_field_index_by_name(name);
   40104             :         case TAG_MPEG4_Group:
   40105         312 :                 return Group_get_field_index_by_name(name);
   40106             :         case TAG_MPEG4_ImageTexture:
   40107         273 :                 return ImageTexture_get_field_index_by_name(name);
   40108             :         case TAG_MPEG4_IndexedFaceSet:
   40109          52 :                 return IndexedFaceSet_get_field_index_by_name(name);
   40110             :         case TAG_MPEG4_IndexedFaceSet2D:
   40111         477 :                 return IndexedFaceSet2D_get_field_index_by_name(name);
   40112             :         case TAG_MPEG4_IndexedLineSet:
   40113          38 :                 return IndexedLineSet_get_field_index_by_name(name);
   40114             :         case TAG_MPEG4_IndexedLineSet2D:
   40115         189 :                 return IndexedLineSet2D_get_field_index_by_name(name);
   40116             :         case TAG_MPEG4_Inline:
   40117         126 :                 return Inline_get_field_index_by_name(name);
   40118             :         case TAG_MPEG4_LOD:
   40119          10 :                 return LOD_get_field_index_by_name(name);
   40120             :         case TAG_MPEG4_Layer2D:
   40121         544 :                 return Layer2D_get_field_index_by_name(name);
   40122             :         case TAG_MPEG4_Layer3D:
   40123          76 :                 return Layer3D_get_field_index_by_name(name);
   40124             :         case TAG_MPEG4_Layout:
   40125        3262 :                 return Layout_get_field_index_by_name(name);
   40126             :         case TAG_MPEG4_LineProperties:
   40127         271 :                 return LineProperties_get_field_index_by_name(name);
   40128             :         case TAG_MPEG4_ListeningPoint:
   40129           0 :                 return ListeningPoint_get_field_index_by_name(name);
   40130             :         case TAG_MPEG4_Material:
   40131         380 :                 return Material_get_field_index_by_name(name);
   40132             :         case TAG_MPEG4_Material2D:
   40133        4604 :                 return Material2D_get_field_index_by_name(name);
   40134             :         case TAG_MPEG4_MovieTexture:
   40135         306 :                 return MovieTexture_get_field_index_by_name(name);
   40136             :         case TAG_MPEG4_NavigationInfo:
   40137          72 :                 return NavigationInfo_get_field_index_by_name(name);
   40138             :         case TAG_MPEG4_Normal:
   40139           0 :                 return Normal_get_field_index_by_name(name);
   40140             :         case TAG_MPEG4_NormalInterpolator:
   40141           0 :                 return NormalInterpolator_get_field_index_by_name(name);
   40142             :         case TAG_MPEG4_OrderedGroup:
   40143        1043 :                 return OrderedGroup_get_field_index_by_name(name);
   40144             :         case TAG_MPEG4_OrientationInterpolator:
   40145         260 :                 return OrientationInterpolator_get_field_index_by_name(name);
   40146             :         case TAG_MPEG4_PixelTexture:
   40147          16 :                 return PixelTexture_get_field_index_by_name(name);
   40148             :         case TAG_MPEG4_PlaneSensor:
   40149          28 :                 return PlaneSensor_get_field_index_by_name(name);
   40150             :         case TAG_MPEG4_PlaneSensor2D:
   40151         210 :                 return PlaneSensor2D_get_field_index_by_name(name);
   40152             :         case TAG_MPEG4_PointLight:
   40153          16 :                 return PointLight_get_field_index_by_name(name);
   40154             :         case TAG_MPEG4_PointSet:
   40155           4 :                 return PointSet_get_field_index_by_name(name);
   40156             :         case TAG_MPEG4_PointSet2D:
   40157          21 :                 return PointSet2D_get_field_index_by_name(name);
   40158             :         case TAG_MPEG4_PositionInterpolator:
   40159         176 :                 return PositionInterpolator_get_field_index_by_name(name);
   40160             :         case TAG_MPEG4_PositionInterpolator2D:
   40161         532 :                 return PositionInterpolator2D_get_field_index_by_name(name);
   40162             :         case TAG_MPEG4_ProximitySensor2D:
   40163          24 :                 return ProximitySensor2D_get_field_index_by_name(name);
   40164             :         case TAG_MPEG4_ProximitySensor:
   40165          14 :                 return ProximitySensor_get_field_index_by_name(name);
   40166             :         case TAG_MPEG4_QuantizationParameter:
   40167         136 :                 return QuantizationParameter_get_field_index_by_name(name);
   40168             :         case TAG_MPEG4_Rectangle:
   40169         989 :                 return Rectangle_get_field_index_by_name(name);
   40170             :         case TAG_MPEG4_ScalarInterpolator:
   40171         708 :                 return ScalarInterpolator_get_field_index_by_name(name);
   40172             :         case TAG_MPEG4_Script:
   40173           0 :                 return Script_get_field_index_by_name(name);
   40174             :         case TAG_MPEG4_Shape:
   40175       12425 :                 return Shape_get_field_index_by_name(name);
   40176             :         case TAG_MPEG4_Sound:
   40177          22 :                 return Sound_get_field_index_by_name(name);
   40178             :         case TAG_MPEG4_Sound2D:
   40179          45 :                 return Sound2D_get_field_index_by_name(name);
   40180             :         case TAG_MPEG4_Sphere:
   40181          42 :                 return Sphere_get_field_index_by_name(name);
   40182             :         case TAG_MPEG4_SphereSensor:
   40183          16 :                 return SphereSensor_get_field_index_by_name(name);
   40184             :         case TAG_MPEG4_SpotLight:
   40185          14 :                 return SpotLight_get_field_index_by_name(name);
   40186             :         case TAG_MPEG4_Switch:
   40187         257 :                 return Switch_get_field_index_by_name(name);
   40188             :         case TAG_MPEG4_TermCap:
   40189           0 :                 return TermCap_get_field_index_by_name(name);
   40190             :         case TAG_MPEG4_Text:
   40191        5833 :                 return Text_get_field_index_by_name(name);
   40192             :         case TAG_MPEG4_TextureCoordinate:
   40193           0 :                 return TextureCoordinate_get_field_index_by_name(name);
   40194             :         case TAG_MPEG4_TextureTransform:
   40195          80 :                 return TextureTransform_get_field_index_by_name(name);
   40196             :         case TAG_MPEG4_TimeSensor:
   40197        1704 :                 return TimeSensor_get_field_index_by_name(name);
   40198             :         case TAG_MPEG4_TouchSensor:
   40199        2160 :                 return TouchSensor_get_field_index_by_name(name);
   40200             :         case TAG_MPEG4_Transform:
   40201        1146 :                 return Transform_get_field_index_by_name(name);
   40202             :         case TAG_MPEG4_Transform2D:
   40203       28526 :                 return Transform2D_get_field_index_by_name(name);
   40204             :         case TAG_MPEG4_Valuator:
   40205        2771 :                 return Valuator_get_field_index_by_name(name);
   40206             :         case TAG_MPEG4_Viewpoint:
   40207         220 :                 return Viewpoint_get_field_index_by_name(name);
   40208             :         case TAG_MPEG4_VisibilitySensor:
   40209          14 :                 return VisibilitySensor_get_field_index_by_name(name);
   40210             :         case TAG_MPEG4_Viseme:
   40211           0 :                 return Viseme_get_field_index_by_name(name);
   40212             :         case TAG_MPEG4_WorldInfo:
   40213        2356 :                 return WorldInfo_get_field_index_by_name(name);
   40214             :         case TAG_MPEG4_AcousticMaterial:
   40215           0 :                 return AcousticMaterial_get_field_index_by_name(name);
   40216             :         case TAG_MPEG4_AcousticScene:
   40217           0 :                 return AcousticScene_get_field_index_by_name(name);
   40218             :         case TAG_MPEG4_ApplicationWindow:
   40219           0 :                 return ApplicationWindow_get_field_index_by_name(name);
   40220             :         case TAG_MPEG4_BAP:
   40221           0 :                 return BAP_get_field_index_by_name(name);
   40222             :         case TAG_MPEG4_BDP:
   40223           0 :                 return BDP_get_field_index_by_name(name);
   40224             :         case TAG_MPEG4_Body:
   40225           0 :                 return Body_get_field_index_by_name(name);
   40226             :         case TAG_MPEG4_BodyDefTable:
   40227           0 :                 return BodyDefTable_get_field_index_by_name(name);
   40228             :         case TAG_MPEG4_BodySegmentConnectionHint:
   40229           0 :                 return BodySegmentConnectionHint_get_field_index_by_name(name);
   40230             :         case TAG_MPEG4_DirectiveSound:
   40231           0 :                 return DirectiveSound_get_field_index_by_name(name);
   40232             :         case TAG_MPEG4_Hierarchical3DMesh:
   40233           0 :                 return Hierarchical3DMesh_get_field_index_by_name(name);
   40234             :         case TAG_MPEG4_MaterialKey:
   40235          16 :                 return MaterialKey_get_field_index_by_name(name);
   40236             :         case TAG_MPEG4_PerceptualParameters:
   40237           0 :                 return PerceptualParameters_get_field_index_by_name(name);
   40238             :         case TAG_MPEG4_TemporalTransform:
   40239           0 :                 return TemporalTransform_get_field_index_by_name(name);
   40240             :         case TAG_MPEG4_TemporalGroup:
   40241           0 :                 return TemporalGroup_get_field_index_by_name(name);
   40242             :         case TAG_MPEG4_ServerCommand:
   40243           0 :                 return ServerCommand_get_field_index_by_name(name);
   40244             :         case TAG_MPEG4_InputSensor:
   40245          24 :                 return InputSensor_get_field_index_by_name(name);
   40246             :         case TAG_MPEG4_MatteTexture:
   40247           0 :                 return MatteTexture_get_field_index_by_name(name);
   40248             :         case TAG_MPEG4_MediaBuffer:
   40249           0 :                 return MediaBuffer_get_field_index_by_name(name);
   40250             :         case TAG_MPEG4_MediaControl:
   40251         213 :                 return MediaControl_get_field_index_by_name(name);
   40252             :         case TAG_MPEG4_MediaSensor:
   40253         163 :                 return MediaSensor_get_field_index_by_name(name);
   40254             :         case TAG_MPEG4_BitWrapper:
   40255           0 :                 return BitWrapper_get_field_index_by_name(name);
   40256             :         case TAG_MPEG4_CoordinateInterpolator4D:
   40257           0 :                 return CoordinateInterpolator4D_get_field_index_by_name(name);
   40258             :         case TAG_MPEG4_DepthImage:
   40259           0 :                 return DepthImage_get_field_index_by_name(name);
   40260             :         case TAG_MPEG4_FFD:
   40261           0 :                 return FFD_get_field_index_by_name(name);
   40262             :         case TAG_MPEG4_Implicit:
   40263           0 :                 return Implicit_get_field_index_by_name(name);
   40264             :         case TAG_MPEG4_XXLFM_Appearance:
   40265           0 :                 return XXLFM_Appearance_get_field_index_by_name(name);
   40266             :         case TAG_MPEG4_XXLFM_BlendList:
   40267           0 :                 return XXLFM_BlendList_get_field_index_by_name(name);
   40268             :         case TAG_MPEG4_XXLFM_FrameList:
   40269           0 :                 return XXLFM_FrameList_get_field_index_by_name(name);
   40270             :         case TAG_MPEG4_XXLFM_LightMap:
   40271           0 :                 return XXLFM_LightMap_get_field_index_by_name(name);
   40272             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   40273           0 :                 return XXLFM_SurfaceMapList_get_field_index_by_name(name);
   40274             :         case TAG_MPEG4_XXLFM_ViewMapList:
   40275           0 :                 return XXLFM_ViewMapList_get_field_index_by_name(name);
   40276             :         case TAG_MPEG4_MeshGrid:
   40277           0 :                 return MeshGrid_get_field_index_by_name(name);
   40278             :         case TAG_MPEG4_NonLinearDeformer:
   40279          22 :                 return NonLinearDeformer_get_field_index_by_name(name);
   40280             :         case TAG_MPEG4_NurbsCurve:
   40281           0 :                 return NurbsCurve_get_field_index_by_name(name);
   40282             :         case TAG_MPEG4_NurbsCurve2D:
   40283           0 :                 return NurbsCurve2D_get_field_index_by_name(name);
   40284             :         case TAG_MPEG4_NurbsSurface:
   40285           0 :                 return NurbsSurface_get_field_index_by_name(name);
   40286             :         case TAG_MPEG4_OctreeImage:
   40287           0 :                 return OctreeImage_get_field_index_by_name(name);
   40288             :         case TAG_MPEG4_XXParticles:
   40289           0 :                 return XXParticles_get_field_index_by_name(name);
   40290             :         case TAG_MPEG4_XXParticleInitBox:
   40291           0 :                 return XXParticleInitBox_get_field_index_by_name(name);
   40292             :         case TAG_MPEG4_XXPlanarObstacle:
   40293           0 :                 return XXPlanarObstacle_get_field_index_by_name(name);
   40294             :         case TAG_MPEG4_XXPointAttractor:
   40295           0 :                 return XXPointAttractor_get_field_index_by_name(name);
   40296             :         case TAG_MPEG4_PointTexture:
   40297           0 :                 return PointTexture_get_field_index_by_name(name);
   40298             :         case TAG_MPEG4_PositionAnimator:
   40299          28 :                 return PositionAnimator_get_field_index_by_name(name);
   40300             :         case TAG_MPEG4_PositionAnimator2D:
   40301          28 :                 return PositionAnimator2D_get_field_index_by_name(name);
   40302             :         case TAG_MPEG4_PositionInterpolator4D:
   40303           0 :                 return PositionInterpolator4D_get_field_index_by_name(name);
   40304             :         case TAG_MPEG4_ProceduralTexture:
   40305           0 :                 return ProceduralTexture_get_field_index_by_name(name);
   40306             :         case TAG_MPEG4_Quadric:
   40307           0 :                 return Quadric_get_field_index_by_name(name);
   40308             :         case TAG_MPEG4_SBBone:
   40309           0 :                 return SBBone_get_field_index_by_name(name);
   40310             :         case TAG_MPEG4_SBMuscle:
   40311           0 :                 return SBMuscle_get_field_index_by_name(name);
   40312             :         case TAG_MPEG4_SBSegment:
   40313           0 :                 return SBSegment_get_field_index_by_name(name);
   40314             :         case TAG_MPEG4_SBSite:
   40315           0 :                 return SBSite_get_field_index_by_name(name);
   40316             :         case TAG_MPEG4_SBSkinnedModel:
   40317           0 :                 return SBSkinnedModel_get_field_index_by_name(name);
   40318             :         case TAG_MPEG4_SBVCAnimation:
   40319           0 :                 return SBVCAnimation_get_field_index_by_name(name);
   40320             :         case TAG_MPEG4_ScalarAnimator:
   40321          24 :                 return ScalarAnimator_get_field_index_by_name(name);
   40322             :         case TAG_MPEG4_SimpleTexture:
   40323           0 :                 return SimpleTexture_get_field_index_by_name(name);
   40324             :         case TAG_MPEG4_SolidRep:
   40325           0 :                 return SolidRep_get_field_index_by_name(name);
   40326             :         case TAG_MPEG4_SubdivisionSurface:
   40327           0 :                 return SubdivisionSurface_get_field_index_by_name(name);
   40328             :         case TAG_MPEG4_SubdivSurfaceSector:
   40329           0 :                 return SubdivSurfaceSector_get_field_index_by_name(name);
   40330             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   40331           0 :                 return WaveletSubdivisionSurface_get_field_index_by_name(name);
   40332             :         case TAG_MPEG4_Clipper2D:
   40333          56 :                 return Clipper2D_get_field_index_by_name(name);
   40334             :         case TAG_MPEG4_ColorTransform:
   40335         144 :                 return ColorTransform_get_field_index_by_name(name);
   40336             :         case TAG_MPEG4_Ellipse:
   40337           8 :                 return Ellipse_get_field_index_by_name(name);
   40338             :         case TAG_MPEG4_LinearGradient:
   40339         180 :                 return LinearGradient_get_field_index_by_name(name);
   40340             :         case TAG_MPEG4_PathLayout:
   40341          72 :                 return PathLayout_get_field_index_by_name(name);
   40342             :         case TAG_MPEG4_RadialGradient:
   40343         174 :                 return RadialGradient_get_field_index_by_name(name);
   40344             :         case TAG_MPEG4_SynthesizedTexture:
   40345           0 :                 return SynthesizedTexture_get_field_index_by_name(name);
   40346             :         case TAG_MPEG4_TransformMatrix2D:
   40347         212 :                 return TransformMatrix2D_get_field_index_by_name(name);
   40348             :         case TAG_MPEG4_Viewport:
   40349         252 :                 return Viewport_get_field_index_by_name(name);
   40350             :         case TAG_MPEG4_XCurve2D:
   40351          48 :                 return XCurve2D_get_field_index_by_name(name);
   40352             :         case TAG_MPEG4_XFontStyle:
   40353           0 :                 return XFontStyle_get_field_index_by_name(name);
   40354             :         case TAG_MPEG4_XLineProperties:
   40355         356 :                 return XLineProperties_get_field_index_by_name(name);
   40356             :         case TAG_MPEG4_AdvancedAudioBuffer:
   40357           0 :                 return AdvancedAudioBuffer_get_field_index_by_name(name);
   40358             :         case TAG_MPEG4_AudioChannelConfig:
   40359           0 :                 return AudioChannelConfig_get_field_index_by_name(name);
   40360             :         case TAG_MPEG4_DepthImageV2:
   40361           0 :                 return DepthImageV2_get_field_index_by_name(name);
   40362             :         case TAG_MPEG4_MorphShape:
   40363           0 :                 return MorphShape_get_field_index_by_name(name);
   40364             :         case TAG_MPEG4_MultiTexture:
   40365           0 :                 return MultiTexture_get_field_index_by_name(name);
   40366             :         case TAG_MPEG4_PointTextureV2:
   40367           0 :                 return PointTextureV2_get_field_index_by_name(name);
   40368             :         case TAG_MPEG4_SBVCAnimationV2:
   40369           0 :                 return SBVCAnimationV2_get_field_index_by_name(name);
   40370             :         case TAG_MPEG4_SimpleTextureV2:
   40371           0 :                 return SimpleTextureV2_get_field_index_by_name(name);
   40372             :         case TAG_MPEG4_SurroundingSound:
   40373           0 :                 return SurroundingSound_get_field_index_by_name(name);
   40374             :         case TAG_MPEG4_Transform3DAudio:
   40375           0 :                 return Transform3DAudio_get_field_index_by_name(name);
   40376             :         case TAG_MPEG4_WideSound:
   40377           0 :                 return WideSound_get_field_index_by_name(name);
   40378             :         case TAG_MPEG4_ScoreShape:
   40379           0 :                 return ScoreShape_get_field_index_by_name(name);
   40380             :         case TAG_MPEG4_MusicScore:
   40381           0 :                 return MusicScore_get_field_index_by_name(name);
   40382             :         case TAG_MPEG4_FootPrintSetNode:
   40383           0 :                 return FootPrintSetNode_get_field_index_by_name(name);
   40384             :         case TAG_MPEG4_FootPrintNode:
   40385           0 :                 return FootPrintNode_get_field_index_by_name(name);
   40386             :         case TAG_MPEG4_BuildingPartNode:
   40387           0 :                 return BuildingPartNode_get_field_index_by_name(name);
   40388             :         case TAG_MPEG4_RoofNode:
   40389           0 :                 return RoofNode_get_field_index_by_name(name);
   40390             :         case TAG_MPEG4_FacadeNode:
   40391           0 :                 return FacadeNode_get_field_index_by_name(name);
   40392             :         case TAG_MPEG4_Shadow:
   40393           0 :                 return Shadow_get_field_index_by_name(name);
   40394             :         case TAG_MPEG4_CacheTexture:
   40395          24 :                 return CacheTexture_get_field_index_by_name(name);
   40396             :         case TAG_MPEG4_EnvironmentTest:
   40397          24 :                 return EnvironmentTest_get_field_index_by_name(name);
   40398             :         case TAG_MPEG4_KeyNavigator:
   40399          88 :                 return KeyNavigator_get_field_index_by_name(name);
   40400             :         case TAG_MPEG4_SpacePartition:
   40401           0 :                 return SpacePartition_get_field_index_by_name(name);
   40402             :         case TAG_MPEG4_Storage:
   40403          16 :                 return Storage_get_field_index_by_name(name);
   40404             :         default:
   40405           0 :                 return -1;
   40406             :         }
   40407       91170 : }
   40408             : 
   40409             : 
   40410             : #endif /*GPAC_DISABLE_VRML*/

Generated by: LCOV version 1.13